//后续遍历的非递归实现
public void postOrder(TreeNode root){
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode p = root;
stack.push(p);
TreeNode pre = null;
while (!stack.isEmpty()) {
TreeNode cur = stack.peek();
if ((cur.left==null && cur.right==null) || (pre!=null && (pre==cur.left || pre==cur.right))) {
System.out.println(cur.val);
pre = stack.pop();
}
else{
if (p.right!=null) {
stack.push(p.right);
}
if (p.left!=null) {
stack.push(p.left);
}
}
}
}
public void postOrder(TreeNode root){
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode p = root;
stack.push(p);
TreeNode pre = null;
while (!stack.isEmpty()) {
TreeNode cur = stack.peek();
if ((cur.left==null && cur.right==null) || (pre!=null && (pre==cur.left || pre==cur.right))) {
System.out.println(cur.val);
pre = stack.pop();
}
else{
if (p.right!=null) {
stack.push(p.right);
}
if (p.left!=null) {
stack.push(p.left);
}
}
}
}
本文介绍了一种二叉树后序遍历的非递归实现方法,通过使用栈来辅助实现遍历过程,避免了递归带来的调用栈过深的问题。该方法对于理解二叉树的遍历逻辑及面试准备非常有用。
4743

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



