package com.wyy.test;
import java.util.Stack;public classTransverseTreeWithoutDGTest {public static voidmain(String[] args){
Tree tree= newTree();
tree.insert("A", 30);
tree.insert("B", 42);
tree.insert("C", 19);
tree.insert("D", 22);
tree.insert("E", 33);
tree.insert("F", 45);
tree.insert("G", 20);
tree.preOrder(tree.root);
System.out.println();
tree.midOrder(tree.root);
System.out.println();
tree.lastOrder(tree.root);
System.out.println();
System.out.println("----------------------------");
Tree.postOrderWithStack(tree.root);
}
}classNode{publicString name;public intcount;publicNode leftChild;publicNode rightChild;public Node(String name,intcount){this.name =name;this.count =count;
}
}classTree{publicNode root;publicTree(){
root= null;
}public void insert(String name,intcount){
Node newNode= newNode(name,count);if(root==null)
root=newNode;else{
Node current=root;
Node parent;while(true){
parent=current;if(count
current=current.leftChild;if(current==null){
parent.leftChild=newNode;return;
}
}else if(count>current.count){
current=current.rightChild;if(current==null){
parent.rightChild=newNode;return;
}
}
}
}
}public Node find(intkey){
Node current=root;while(true){if(current==null)return null;if(key==current.count)returncurrent;else if(key
current=current.leftChild;
}else if(key>current.count){
current=current.rightChild;
}
}
}public voidpreOrder(Node node){if(node!=null){
System.out.print(node.name);
preOrder(node.leftChild);
preOrder(node.rightChild);
}
}public voidmidOrder(Node node){if(node!=null){
midOrder(node.leftChild);
System.out.print(node.name);
midOrder(node.rightChild);
}
}public voidlastOrder(Node node){if(node!=null){
lastOrder(node.leftChild);
lastOrder(node.rightChild);
System.out.print(node.name);
}
}public voidpreOrderWithStack(Node node){
Stack s = new Stack();
Node current=node;while(current!=null||!s.isEmpty()){while(current!=null){
System.out.print(current.name+" ");if(current.rightChild!=null){
s.push(current.rightChild);
}
current=current.leftChild;
}if(!s.isEmpty()){
current=s.pop();
}
}
}public voidinOrderWithStack(Node node){
Node current=node;
Stack s = new Stack();while(current!=null||!s.isEmpty()){while(current!=null){
s.push(current);
current=current.leftChild;
}if(!s.isEmpty()){
current=s.pop();
System.out.print(current.name+" ");
current=current.rightChild;
}
}
}public static voidpostOrderWithStack(Node node){
Node current;
Node pre= null;
Stack s= new Stack();
s.push(node);while(!s.isEmpty()){
current=s.peek();if((current.leftChild==null&¤t.rightChild==null)||(pre!=null&&(pre==current.leftChild||pre==current.rightChild))){
System.out.print(s.pop().name);//如果节点的左右子节点都为null 或者都被遍历过则可以访问
pre =current;
}else{if(current.rightChild!=null)
s.push(current.rightChild);if(current.leftChild!=null)
s.push(current.leftChild);
}
}
}
}