1 packagebinary_search_tree1;2
3 importjava.util.Queue;4 importjava.util.Stack;5
6 public classIntBST {7 protectedIntBSTNode root;8 publicIntBST(){9 root = null;10 }11 protected voidvisit(IntBSTNode p){12 System.out.println(p.key+" ");13 }14 public IntBSTNode search(IntBSTNode p, inte1){15 while(p != null)16 if(e1 ==p.key)17 returnp;18 else if(e1
66 IntBSTNode p =root;67 Stack traveStack = newStack();68 if(p != null)69 traveStack.push(p);70 while(!traveStack.isEmpty()){71 p =(IntBSTNode)traveStack.pop();72 visit(p);73 if(p.right != null)74 traveStack.push(p.right);75 if(p.left != null)76 traveStack.push(p.left);77 }78 }79 public void iterativeInorder(){ //中序遍历树的非递归实现
80 IntBSTNode p =root;81 Stack traveStack = newStack();82 while(p != null){83 while(p != null){84 if(p.right != null)85 traveStack.push(p.right);86 traveStack.push(p);87 p =p.left;88 }89 p =(IntBSTNode)traveStack.pop();90 while(!traveStack.isEmpty()&&p.right==null){91 visit(p);92 p =(IntBSTNode)traveStack.pop();93 }94 visit(p);95 if(!traveStack.isEmpty())96 p =(IntBSTNode)traveStack.pop();97 else p = null;98 }99 }100 public void iterativePostorder(){ //后序遍历树的非递归实现
101 IntBSTNode p = root, q =root;102 Stack traveStack = newStack();103 while(p != null){104 for(; p.left != null; p =p.left)105 traveStack.push(p);106 while(p != null&&(p.right==null||p.right==q)){107 visit(p);108 q =p;109 if(traveStack.isEmpty())110 return;111 p =(IntBSTNode)traveStack.pop();112 }113 traveStack.push(p);114 p =p.right;115 }116 }117 public void MorrisInorder(){ //Morris中序遍历算法的实现
118 IntBSTNode p =root,tmp;119 while(p != null)120 if(p.left == null){121 visit(p);122 p =p.right;123 }124 else{125 tmp =p.left;126 while(tmp.right != null&&tmp.right !=p)127 tmp =tmp.right;128 if(tmp.right == null){129 tmp.right =p;130 p =p.left;131 }132 else{133 visit(p);134 tmp.right = null;135 p =p.right;136 }137 }138 }139 public void insert(inte1){140 IntBSTNode p = root, prev = null;141 while(p != null){142 prev =p;143 if(p.key
155 IntBSTNode tmp, node, p = root, prev = null;156 while(p != null&&p.key !=e1){157 prev =p;158 if(p.key
186 IntBSTNode node, p = root, prev = null;187 while(p != null &&p.key !=e1){188 prev =p;189 if(p.key