标题: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();
}
}
转载请注明原文地址: https://lol.8miu.com/read-36956.html