递归
package class10 ;
public class Code02_RecursiveTraversalBT {
public static class Node {
public int value;
public Node left;
public Node right;
public Node ( int v) {
value = v;
}
}
public static void pre ( Node head) {
if ( head == null ) {
return ;
}
System . out. println ( head. value) ;
pre ( head. left) ;
pre ( head. right) ;
}
public static void in ( Node head) {
if ( head == null ) {
return ;
}
in ( head. left) ;
System . out. println ( head. value) ;
in ( head. right) ;
}
public static void pos ( Node head) {
if ( head == null ) {
return ;
}
pos ( head. left) ;
pos ( head. right) ;
System . out. println ( head. value) ;
}
public static void main ( String [ ] args) {
Node head = new Node ( 1 ) ;
head. left = new Node ( 2 ) ;
head. right = new Node ( 3 ) ;
head. left. left = new Node ( 4 ) ;
head. left. right = new Node ( 5 ) ;
head. right. left = new Node ( 6 ) ;
head. right. right = new Node ( 7 ) ;
pre ( head) ;
System . out. println ( "========" ) ;
in ( head) ;
System . out. println ( "========" ) ;
pos ( head) ;
System . out. println ( "========" ) ;
}
}
非递归
package class10 ;
import java. util. Stack ;
public class Code03_UnRecursiveTraversalBT {
public static class Node {
public int value;
public Node left;
public Node right;
public Node ( int v) {
value = v;
}
}
public static void pre ( Node head) {
System . out. print ( "pre-order: " ) ;
if ( head != null ) {
Stack < Node > stack = new Stack < Node > ( ) ;
stack. add ( head) ;
while ( ! stack. isEmpty ( ) ) {
head = stack. pop ( ) ;
System . out. print ( head. value + " " ) ;
if ( head. right != null ) {
stack. push ( head. right) ;
}
if ( head. left != null ) {
stack. push ( head. left) ;
}
}
}
System . out. println ( ) ;
}
public static void in ( Node cur) {
System . out. print ( "in-order: " ) ;
if ( cur != null ) {
Stack < Node > stack = new Stack < Node > ( ) ;
while ( ! stack. isEmpty ( ) || cur != null ) {
if ( cur != null ) {
stack. push ( cur) ;
cur = cur. left;
} else {
cur = stack. pop ( ) ;
System . out. print ( cur. value + " " ) ;
cur = cur. right;
}
}
}
System . out. println ( ) ;
}
public static void pos1 ( Node head) {
System . out. print ( "pos-order: " ) ;
if ( head != null ) {
Stack < Node > s1 = new Stack < Node > ( ) ;
Stack < Node > s2 = new Stack < Node > ( ) ;
s1. push ( head) ;
while ( ! s1. isEmpty ( ) ) {
head = s1. pop ( ) ;
s2. push ( head) ;
if ( head. left != null ) {
s1. push ( head. left) ;
}
if ( head. right != null ) {
s1. push ( head. right) ;
}
}
while ( ! s2. isEmpty ( ) ) {
System . out. print ( s2. pop ( ) . value + " " ) ;
}
}
System . out. println ( ) ;
}
public static void pos2 ( Node h) {
System . out. print ( "pos-order: " ) ;
if ( h != null ) {
Stack < Node > stack = new Stack < Node > ( ) ;
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 ( ) ;
}
public static void main ( String [ ] args) {
Node head = new Node ( 1 ) ;
head. left = new Node ( 2 ) ;
head. right = new Node ( 3 ) ;
head. left. left = new Node ( 4 ) ;
head. left. right = new Node ( 5 ) ;
head. right. left = new Node ( 6 ) ;
head. right. right = new Node ( 7 ) ;
pre ( head) ;
System . out. println ( "========" ) ;
in ( head) ;
System . out. println ( "========" ) ;
pos1 ( head) ;
System . out. println ( "========" ) ;
pos2 ( head) ;
System . out. println ( "========" ) ;
}
}