标题:java实现二叉树的后序遍历
public class TestMyTreeB03 {
public void backorder(IntNode p) {
if(p == null) {
return ;
}else {
this.backorder(p.left);
this.backorder(p.right);
System.out.print(p.val + " ");
}
}
public void backorder02(IntNode p) {
Deque<IntNode> s = new LinkedList<>();
if(p == null) {
return ;
}
s.push(p);
while(!s.isEmpty()) {
while(s.peek().left != null) {
IntNode node = s.peek().left;
s.push(node);
}
IntNode node = s.peek().right;
while(!s.isEmpty() && node == null) {
System.out.print(s.peek().val + " ");
IntNode m = s.pop();
if(s.isEmpty()) {
break;
}
node = s.peek().right;
while(node == m) {
m = s.pop();
System.out.print(m.val + " ");
if(s.isEmpty()) {
break;
}
node = s.peek().right;
}
}
if(!s.isEmpty() && node != null) {
s.push(node);
}
}
}
@Test
public void test02() {
IntNode p1 = new IntNode('a');
IntNode p2 = new IntNode('b');
IntNode p3 = new IntNode('c');
IntNode p4 = new IntNode('d');
IntNode p5 = new IntNode('e');
IntNode p6 = new IntNode('f');
IntNode p7 = new IntNode('g');
IntNode p8 = new IntNode('h');
IntNode p9 = new IntNode('i');
IntNode p10 = new IntNode('j');
IntNode p11 = new IntNode('k');
p1.left = p2;
p1.right = p3;
p2.left = p4;
p2.right = p5;
p4.right = p6;
p5.left = p7;
p5.right = p8;
p3.left = p9;
p3.right = p10;
p10.right =p11;
System.out.println("使用递归的后序遍历");
this.backorder(p1);
System.out.println();
System.out.println("不使用递归的后序遍历");
this.backorder02(p1);
System.out.println();
}
}