Advertisement
Guest User

Untitled

a guest
May 28th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.81 KB | None | 0 0
  1. package final_repitition;
  2.  
  3.  
  4.  
  5. public class BST{
  6.  
  7. class Node{
  8. int data;
  9. Node left;
  10. Node right;
  11. public Node(int data){
  12. this.data = data;
  13. this.left = null;
  14. this.right = null;
  15. }
  16. public Node(int data,Node left,Node right){
  17. this.data = data;
  18. this.left = left;
  19. this.right = right;
  20. }
  21. public String toString(){
  22. return ""+this.data;
  23. }
  24. }
  25.  
  26. Node root;
  27.  
  28. public BST(){
  29. root = null;
  30. }
  31.  
  32. public void add(int data){
  33. if(root==null){
  34. root = new Node(data);
  35. }else{
  36. addRec(root,data);
  37. }
  38. }
  39.  
  40. private Node addRec(Node cur,int data){
  41. if(cur == null){
  42. cur = new Node(data);
  43. }
  44. if(data>cur.data){
  45. cur.left = addRec(cur.left,data);
  46. }
  47. else if(data<cur.data){
  48. cur.right = addRec(cur.right,data);
  49. }
  50.  
  51. return cur;
  52. }
  53.  
  54. public String toString(){
  55. return recToString(root,0);
  56. }
  57.  
  58. public String recToString(Node c,int depth){
  59. if(c==null){
  60. return "null";
  61. }
  62.  
  63. String ret = "";
  64. if(c==root){
  65. ret+="Root:";
  66. }
  67. ret += "value:"+c.data;
  68.  
  69.  
  70. if(c.left==null && c.right==null){
  71. return ret;
  72. }
  73. ret+="\n";
  74. for(int i=0;i<depth+1;i++){ret+=" ";}
  75. ret += "Left:" + recToString(c.left,depth+1);
  76. ret+="\n";
  77. for(int i=0;i<depth+1;i++){ret+=" ";}
  78. ret += "Right:" + recToString(c.right,depth+1);
  79.  
  80. return ret;
  81. }
  82.  
  83. public boolean find(int data){
  84. return findRec(root,data);
  85. }
  86.  
  87. private boolean findRec(Node c,int data){
  88. if(c==null){
  89. return false;
  90. }
  91. if(c.data==data){
  92. return true;
  93. }
  94. else if(data>c.data){
  95. return findRec(c.left,data);
  96. }
  97. else{
  98. return findRec(c.right,data);
  99. }
  100.  
  101. }
  102.  
  103. public String inOrder(){
  104. return inOrderRec(root);
  105. }
  106.  
  107. private String inOrderRec(Node c){
  108. String result = "";
  109. if(c==null){
  110. return "";
  111. }
  112. result+=inOrderRec(c.left)+""+c+""+inOrderRec(c.right);
  113. return result;
  114. }
  115.  
  116. public String postOrder(){
  117. return postOrderRec(root);
  118. }
  119.  
  120. private String postOrderRec(Node c){
  121. String result = "";
  122. if(c==null){
  123. return "";
  124. }
  125. result+=postOrderRec(c.left)+""+postOrderRec(c.right)+""+c;
  126. return result;
  127. }
  128.  
  129. public String preOrder(){
  130. return preOrderRec(root);
  131. }
  132.  
  133. private String preOrderRec(Node c){
  134. String result = "";
  135. if(c==null){
  136. return "";
  137. }
  138. result+=c+""+preOrderRec(c.left)+""+preOrderRec(c.right)+"";
  139. return result;
  140. }
  141.  
  142. public boolean delete(int data){
  143. Node parent = root;
  144. Node current = root;
  145. boolean left = false;
  146. while(current.data!=data){
  147. parent = current;
  148. if(current.data>data){
  149. left = false;
  150. current = current.right;
  151. }
  152. else{
  153. left = true;
  154. current = current.left;
  155. }
  156. if(current==null){
  157. return false;
  158. }
  159. }
  160.  
  161. if(current.left == null && current.right == null){
  162. System.out.println("Both null");
  163. if(current==root){
  164. root=null;
  165. }
  166. if(left){
  167. parent.left = null;
  168. }
  169. else{
  170. parent.right = null;
  171. }
  172. }
  173.  
  174. else if(current.right == null){
  175. System.out.println("Right null");
  176. if(current==root){
  177. root = current.left;
  178. }else if(left){
  179. parent.left = current.left;
  180. }else{
  181. parent.right = current.left;
  182. }
  183. }
  184. else if(current.left == null){
  185. System.out.println("left null");
  186. if(current == root){
  187. root = current.right;
  188. }
  189. else if(left){
  190. parent.left = current.right;
  191. }
  192. else{
  193. parent.right= current.right;
  194. }
  195. }
  196. else if(current.left!=null && current.right!=null){
  197. System.out.println("Both not null");
  198. Node successor = getSuccessor(current);
  199. if(current==root){
  200. root = successor;
  201. }
  202. else if(left){
  203. parent.left = successor;
  204. }
  205. else{
  206. parent.right = successor;
  207. }
  208. }
  209.  
  210. return true;
  211.  
  212.  
  213. }
  214.  
  215. private Node getSuccessor(Node deleteNode){
  216. Node successor = null;
  217. Node successorParent = null;
  218. Node current = deleteNode.right;
  219.  
  220. while(current!=null){
  221. successorParent = successor;
  222. successor = current;
  223. current = current.left;
  224. }
  225.  
  226. if(successor!=deleteNode.right){
  227. successorParent.left = successor.right;
  228. successor.right = deleteNode.right;
  229. }
  230.  
  231.  
  232. return successor;
  233. }
  234.  
  235.  
  236. public static void main(String [] args){
  237. BST bst = new BST();
  238. bst.add(3);
  239. bst.add(5);
  240. bst.add(2);
  241. bst.add(1);
  242. bst.add(4);
  243. bst.add(6);
  244.  
  245.  
  246. System.out.println("Find(1):"+bst.find(1));
  247. System.out.println("Find(10):"+bst.find(10));
  248. System.out.println("Find(4):"+bst.find(4));
  249.  
  250. System.out.println("InOrder:" + bst.inOrder());
  251. System.out.println("PostOrder:"+ bst.postOrder());
  252. System.out.println("PreOrder:"+ bst.preOrder());
  253.  
  254.  
  255. System.out.println("Before delete:");
  256. System.out.println(bst);
  257. System.out.println("After delete:");
  258. System.out.println(bst.delete(5));
  259. System.out.println(bst);
  260.  
  261. }
  262. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement