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;
}
本文介绍了一种使用递归方法实现二叉树中序遍历的算法,并提供了一个利用栈进行迭代遍历的解决方案。
331

被折叠的 条评论
为什么被折叠?



