LeetCode 94. Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes’ values.
For example:
Given binary tree [1,null,2,3]
,
1
\
2
/
3
return [1,3,2]
.
方法1:递归
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res=new ArrayList<>();
return inorderTree(res,root);
}
public List<Integer> inorderTree(List<Integer> list,TreeNode node){
if(node!=null){
if(node.left!=null) inorderTree(list, node.left);
list.add(node.val);
if(node.right!=null) inorderTree(list, node.right);\
}
return list;
}
方法2:非递归
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res=new ArrayList<>();
Stack<TreeNode> stack=new Stack<>();
TreeNode cur=root;
while(cur!=null||!stack.isEmpty()){
while(cur!=null){
stack.add(cur);
cur=cur.left; //先将树根及所有左结点全部入栈;
}
cur=stack.pop();
res.add(cur.val);
cur=cur.right; //再处理右子树,若不存在右子树,则继续处理上一个根结点
}
return res;
}
}