非递归
步骤:
1.申请一个栈,初始时令temp为root
2.先将temp压入stack,对以temp为头节点的子树来说,依次把左边界压入,不断令temp = temp.left
3.不断重复步骤2,直到temp为空。此时从stack中pop出一个节点,记为新的temp,打印temp的值,并且让temp = temp.right,然后继续重复步骤2
4.直到stack为空且temp为空的时候结束过程
代码:
public List<Integer> inorderTraversal1(TreeNode root){
List<Integer> list = new LinkedList<>();
if (root == null) {
return list;
}
Stack<TreeNode> stack = new Stack<> ();
TreeNode temp = root;
while (!stack.isEmpty() || temp != null){
if (temp != null){
stack.push(temp);
temp = temp.left;
}else {
temp = stack.pop();
list.add(temp.val);
temp = temp.right;
}
}
return list;
}
递归
List<Integer> list = new ArrayList<Integer> ();
public List<Integer> inorderTraversal(TreeNode root) {
if (root == null){
return list;
}
inorderTraversal(root.left);
list.add(root.val);
inorderTraversal(root.right);
return list;
}