前言:递归方式遍历二叉树不难,理解递归序就很简单——递归方式实现二叉树的三种遍历。
非递归的方法就是不用系统栈,通过自己设计的压栈方式来实现——非递归方式实现二叉树的三种遍历。
其中先序和中序只需用一个栈可以实现,比较好理解。后序用两个栈实现也好理解。但是一个栈也可以实现二叉树的后序遍历。所以单独拎出来写一篇博客记录!
关键是设置两个变量: h:记录之前打印的结点的位置 c:记录栈顶的位置
public static void pos2(Node h) {
System.out.println("pos-order:");
if(h!=null) {
Stack<Node> stack=new Stack<>();
stack.push(h);
Node c=null;
while(!stack.isEmpty()) {
c=stack.peek();
if(c.left!=null && h!=c.left && h!=c.right) {
stack.push(c.left);
}else if(c.right!=null && h!=c.right) {
stack.push(c.right);
}else {
System.out.print(stack.pop().value+" ");
h=c;
}
}
}
System.out.println();
}
|