public static void preOrder(Node root){
//check
Stack stack = new Stack();
Node p = root;
while(p != null){
stack.push(p);
System.out.print(p.value + " ");
if(p.left != null){
p = p.left;
continue;
}
while(true){
Node node = (Node)stack.pop();
if(node == null) {
return;
}
if(node.right != null){
p = node.right;
break;
}
}
}
}
public static void inOrder(Node root){
//check
Stack stack = new Stack();
Node p = root;
while(p != null){
stack.push(p);
if(p.left != null){
p = p.left;
continue;
}
while(true){
Node node = (Node)stack.pop();
if(node == null) {
return;
}
System.out.print(node.value + " ");
if(node.right != null){
p = node.right;
break;
}
}
}
}
public static void postOrder(Node root){
//check
Stack stack = new Stack();
Node p = root;
while(p != null){
stack.push(p);
if(p.left != null){
p = p.left;
continue;
}
Node last = null;
while(true){
Node node = (Node)stack.peek();
if(node == null){//根节点
return;
}
//要记下上次的点,避免处理完右子节点,接着处理父节点时陷入死循环
if((node.right == null) || (node.right == last)){
last = (Node)stack.pop();
System.out.print(node.value + " ");
}else{
p = node.right;
break;
}
}
}
}