二叉树的中序历遍,非递归算法,使用栈进行深度优先历遍,在每个节点pop出栈的时候访问即可。
public List<Integer> inorderTraversal(TreeNode root) {
LinkedList<Integer> l = new LinkedList<Integer>();
Stack<TreeNode> s = new Stack<TreeNode>();
if (root==null)return l;
TreeNode n =root;
//l.add(n.val);
s.push(n);
while (true) {
while (n.left != null) {
n = n.left;
s.push(n);
//l.add(n.val);
}
if(s.isEmpty())break;
else {
n=s.pop();
l.add(n.val);
while (n.right==null&&!s.isEmpty()) {
n=s.pop();
l.add(n.val);
}
if(n.right==null&&s.isEmpty())break;
n=n.right;
//l.add(n.val);
s.push(n);
}
}
return l;
}
本文介绍了一种实现二叉树中序遍历的非递归算法,该算法利用栈进行深度优先搜索,通过在每次从栈中弹出节点时访问节点值的方式完成遍历。
694

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



