一、二叉树递归和非递归方式实现先序、中序和后序遍历
public class PreInPosTraversal {
public static class Node {
public int value;
public Node left;
public Node right;
public Node ( int data) {
this . value = data;
}
public static void preOrderRecur ( Node head) {
if ( head == null) {
return ;
}
System. out. print ( head. value+ " " ) ;
preOrderRecur ( head. left) ;
preOrderRecur ( head. right) ;
}
public static void inOrderRecur ( Node head) {
if ( head == null) {
return ;
}
inOrderRecur ( head. left) ;
System. out. print ( head. value+ " " ) ;
inOrderRecur ( head. right) ;
}
public static void posOrderRecur ( Node head) {
if ( head == null) {
return ;
}
posOrderRecur ( head. left) ;
posOrderRecur ( head. right) ;
System. out. print ( head. value+ " " ) ;
}
public static void preOrderUnRecur ( 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 posOrderUnRecur ( 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 inOrderunRecur ( Node head) {
System. out. print ( "in-order" ) ;
if ( head != null) {
Stack< Node> stack = new Stack < Node> ( ) ;
while ( ! stack. isEmpty ( ) || head != null) {
if ( head != null) {
stack. push ( head) ;
head = head. left;
} else {
head = stack. pop ( ) ;
System. out. print ( head. value+ " " ) ;
head = head. right;
}
}
}
System. out. println ( ) ;
}
}