//root left right
public void preTrace(Node rootNode){
if(rootNode != null){
System.out.print(rootNode.data+",");
preTrace(rootNode.left);
preTrace(rootNode.right);
}
}
public void preStackTrace(Node root){
TreeStack stack = new TreeStack(30);
stack.push(root);
System.out.println("preTraceStack");
while(!stack.isEmpty()){
Node tmp = stack.pop();
System.out.print(tmp.data+",");
if(tmp.right != null)
stack.push(tmp.right);
if(tmp.left != null)
stack.push(tmp.left);
}
System.out.println();
}
// left root right
public void midTrace(Node rootNode){
if(rootNode != null){
midTrace(rootNode.left);
System.out.print(rootNode.data+",");
midTrace(rootNode.right);
}
}
public void midStackTrace(Node root){
TreeStack stack = new TreeStack(30);
Node cur = root;
System.out.println("midTraceStack");
while(cur != null || !stack.isEmpty()){
while(cur != null){
stack.push(cur);
cur = cur.left;
}
if(!stack.isEmpty()){
cur = stack.pop();
System.out.print(cur.data+",");
cur = cur.right;
}
}
System.out.println();
}
//left right root
public void backTrace(Node rootNode){
if(rootNode != null){
backTrace(rootNode.left);
backTrace(rootNode.right);
System.out.print(rootNode.data+",");
}
}
public void backStackTrace(Node root){
System.out.println("backTraceStack:");
TreeStack stack = new TreeStack(30);
stack.push(root);
Node cur = root.left;
Node last;
while(!stack.isEmpty()) {
while(cur != null){
stack.push(cur);
cur = cur.left;
}
if(stack.peek().right == null){
System.out.print(stack.peek().data+",");
last = stack.pop();
if(stack.isEmpty())
break;
if(last == stack.peek().right){
stack.peek().right = null;
}
}
cur = stack.peek().right;
}
System.out.println();
}