![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.asus.comm; 2 3 public class Tree { 4 public class node{ 5 public node left; 6 public node right; 7 public int value; 8 public node(int data){ 9 this.value=data; 10 } 11 12 public String toString() { 13 System.out.println(String.valueOf(value)); 14 return String.valueOf(value); 15 } 16 } 17 18 public node root; 19 20 public Tree(){ 21 22 } 23 24 public void add(int data){ 25 if (root==null){ 26 root=new node(data); 27 } 28 else{ 29 add(root,data); 30 } 31 } 32 33 public void add(node n,int data){ 34 if (data<n.value){ 35 if (n.left==null){ 36 n.left=new node(data); 37 return; 38 } 39 add(n.left,data); 40 }else{ 41 if (n.right==null){ 42 n.right=new node(data); 43 return; 44 } 45 add(n.right,data); 46 } 47 } 48 49 public void InOrder(node n){ 50 if (n!=null){ 51 InOrder(n.left); 52 n.toString(); 53 InOrder(n.right); 54 } 55 } 56 57 public node findnode(int data){ 58 node ret=null; 59 if (root!=null){ 60 node cur=root; 61 while(true){ 62 if (cur.value==data){ 63 ret=cur; 64 break; 65 } 66 if (cur.value>data){ 67 cur=cur.left; 68 }else{ 69 cur=cur.right; 70 } 71 if (cur==null){ 72 break; 73 } 74 } 75 } 76 return ret; 77 } 78 79 public node findparent(int data){ 80 node ret=null; 81 if (root!=null){ 82 node cur=root; 83 node parent=root; 84 while(true){ 85 if (cur.value==data){ 86 ret=parent; 87 break; 88 } 89 if (cur.value>data){ 90 parent=cur; 91 cur=cur.left; 92 }else{ 93 parent=cur; 94 cur=cur.right; 95 } 96 if (cur==null){ 97 break; 98 } 99 } 100 } 101 return ret; 102 } 103 104 public void del(int data){ 105 106 107 node cur=findnode(data); 108 node parent=findparent(data); 109 if (cur!=null){ 110 if (cur.left==null && cur.right==null){ 111 if (cur==parent){ 112 root=null; 113 } 114 115 if (data>parent.value){ 116 parent.right=null; 117 }else{ 118 parent.left=null; 119 } 120 } 121 122 123 if (cur.left==null && cur.right!=null){ 124 if (data>parent.value){ 125 parent.right=cur.right; 126 }else{ 127 parent.left=cur.right; 128 } 129 } 130 131 132 if (cur.left!=null && cur.right==null){ 133 if (data>parent.value){ 134 parent.right=cur.left; 135 }else{ 136 parent.left=cur.left; 137 } 138 } 139 140 if (cur.left!=null && cur.right!=null){ 141 if (data>parent.value){ 142 parent.right=delnode2(cur); 143 }else if (data<parent.value){ 144 parent.left=delnode(cur); ; 145 }else{ 146 root=delnode(cur); ; 147 } 148 149 } 150 } 151 152 153 } 154 private node delnode(node cur1){ 155 node temp=null; 156 node tempP=null; 157 tempP=cur1; 158 temp=cur1.right; 159 while(temp.right!=null){ 160 tempP=temp; 161 temp=temp.right; 162 } 163 tempP.right=null; 164 temp.right=cur1.right; 165 temp.left=cur1.left; 166 return temp; 167 } 168 169 private node delnode2(node cur1){ 170 node temp=null; 171 node tempP=null; 172 tempP=cur1; 173 temp=cur1.right; 174 while(temp.left!=null){ 175 tempP=temp; 176 temp=temp.left; 177 } 178 tempP.left=null; 179 temp.right=cur1.right; 180 temp.left=cur1.left; 181 return temp; 182 } 183 184 }