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]
.
我的做法:用的是递归,定义doTraversal函数进行左中右遍历,多次迭代。
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<Integer>();
if(root==null)
return res;
doTraversal(root,res);
return res;
}
public void doTraversal(TreeNode root,List<Integer> res){
TreeNode left = root.left;
TreeNode right = root.right;
if(left!=null){
doTraversal(left,res);
}
res.add(root.val);
if(right!=null){
doTraversal(right,res);
}
}
但是注意这道题目的标签是stack,那么用栈解决并且只用迭代的方法:(参考discussion)
在栈中按照遍历顺序保存左节点。
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode cur = root;
while(cur!=null || !stack.empty()){
while(cur!=null){
stack.add(cur);
cur = cur.left;
}
cur = stack.pop();
list.add(cur.val);
cur = cur.right;
}
return list;
}