Advertisement
Guest User

Untitled

a guest
May 7th, 2017
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.92 KB | None | 0 0
  1. public class BST {
  2.  
  3. private static Node root;
  4.  
  5. private static class Node {
  6.  
  7. Node parent;
  8. Node left;
  9. Node right;
  10. int data;
  11.  
  12. Node(int data) {
  13. this.data = data;
  14. }
  15.  
  16. @Override
  17. public String toString() {
  18. return "" + data;
  19. }
  20. }
  21.  
  22. public void insert(int data) {
  23. root = insert(root, data);
  24. }
  25.  
  26. public Node insert(Node node, int data) {
  27. if (node == null) {
  28. node = new Node(data);
  29. } else if (data < node.data) {
  30. node.left = insert(node.left, data);
  31. node.left.parent = node;
  32. } else {
  33. node.right = insert(node.right, data);
  34. node.right.parent = node;
  35. }
  36. return node;
  37. }
  38.  
  39. private void swap(Node a, Node b) {
  40.  
  41. if (a.parent == null) {
  42. root = b;
  43. } else if (a == a.parent.left) {
  44. a.parent.left = b;
  45. } else {
  46. a.parent.right = b;
  47. }
  48.  
  49. if (b != null) {
  50. b.parent = a.parent;
  51. }
  52. }
  53.  
  54. public void delete(int data) {
  55. delete(root, data);
  56. }
  57.  
  58. public void delete(Node node, int data) {
  59.  
  60. if (node == null) {
  61. return;
  62. } else if (data == node.data) {
  63. if (node.left == null) {
  64. swap(node, node.right);
  65. } else if (node.right == null) {
  66. swap(node, node.left);
  67. } else {
  68. Node minNode = node.right;
  69. while (minNode.left != null) {
  70. minNode = minNode.left;
  71. }
  72. if (minNode.parent != node) {
  73. swap(minNode, minNode.right);
  74. minNode.right = node.right;
  75. minNode.right.parent = minNode;
  76. }
  77.  
  78. swap(node, minNode);
  79. minNode.left = node.left;
  80. minNode.left.parent = minNode;
  81. }
  82. } // Continue searching in the left subtree.
  83. else if (data < node.data) {
  84. delete(node.left, data);
  85. } // Continue searching in the right subtree.
  86. else {
  87. delete(node.right, data);
  88. }
  89. }
  90.  
  91. public boolean lookup(int data) {
  92. return lookup(root, data);
  93. }
  94.  
  95. public boolean lookup(Node node, int data) {
  96. if (node == null) {
  97. // Can't find it.
  98. return false;
  99. } else if (data == node.data) {
  100. // Found it.
  101. return true;
  102. } else if (data < node.data) {
  103. // Search left subtree.
  104. return lookup(node.left, data);
  105. } else {
  106. // Search right subtree.
  107. return lookup(node.right, data);
  108. }
  109. }
  110.  
  111. public int minValue() {
  112. return minValue(root);
  113. }
  114.  
  115. public int minValue(Node node) {
  116. Node cursor = node;
  117. while (cursor.left != null) {
  118. cursor = cursor.left;
  119. }
  120. return cursor.data;
  121. }
  122.  
  123. public int maxValue() {
  124. return maxValue(root);
  125. }
  126.  
  127. public int maxValue(Node node) {
  128. Node cursor = node;
  129. while (cursor.right != null) {
  130. cursor = cursor.right;
  131. }
  132. return cursor.data;
  133. }
  134.  
  135. public void inorderTraversal() {
  136. inorderTraversal(root);
  137. }
  138.  
  139. private void inorderTraversal(Node node) {
  140. if (node != null) {
  141. inorderTraversal(node.left);
  142. System.out.print(node.data + " ");
  143. inorderTraversal(node.right);
  144. }
  145. }
  146.  
  147. public static int size(Node root) {
  148. if (root == null) {
  149. return 0;
  150. } else {
  151. return 1 + size(root.left) + size(root.right);
  152. }
  153. }
  154.  
  155.  
  156.  
  157.  
  158. public static int[] generateRandomNumbers(int size) {
  159. if (size < 0) {
  160. throw new IllegalArgumentException("size must be greater than less than 0");
  161. }
  162. Random random = new Random();
  163. int[] results = new int[size];
  164. for (int i = 0; i < size; i++) {
  165. results[i] = random.nextInt(size);
  166. }
  167. return results;
  168. }
  169.  
  170. public static void main(String[] args) {
  171. BST bst = new BST();
  172. int[] randoms = generateRandomNumbers(100);
  173. for (int i : randoms) {
  174. bst.insert(i);
  175. }
  176.  
  177. System.out.println(bst.root);
  178. System.out.println("\n Sorted :");
  179. bst.inorderTraversal();
  180.  
  181. System.out.println("\n\nMax Value:");
  182. System.out.println(bst.maxValue());
  183. System.out.println("\n Min Value:");
  184. System.out.println(bst.minValue());
  185.  
  186. System.out.println(bst.lookup(randoms[1]));
  187. System.out.println(bst.lookup(randoms[99]));
  188. System.out.println(bst.size(root.left));
  189. System.out.println(bst.size(root.right));
  190. }
  191.  
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement