Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.72 KB | None | 0 0
  1. public class OrderedBSTree {
  2. //you may declare any variables here.
  3. class Node {
  4. int val;
  5. Node left, right;
  6.  
  7. public Node(int item) {
  8. val = item;
  9. left = right = null;
  10. }
  11. public Node getLeft() {
  12. return left;
  13. }
  14. public Node getRight() {
  15. return right;
  16. }
  17. public void setLeft (Node left) {
  18. this.left = left;
  19. }
  20. public void setRight(Node right) {
  21. this.right = right;
  22. }
  23. }
  24.  
  25. // Root of BST
  26. Node root;
  27. Stack<Integer> stack = new Stack<Integer>();
  28.  
  29.  
  30. /**
  31. * return the last inserted element
  32. * Runtime is O(1)
  33. * @return
  34. */
  35. public int getLast() {
  36.  
  37. return stack.peek();
  38. }
  39.  
  40.  
  41. /**
  42. * return the min value of the tree.
  43. * Runtime is ≤ O(lgN)
  44. * @return
  45. */
  46.  
  47. public int getMin() {
  48. Node current = root;
  49. while (current.left != null) {
  50. current = current.left;
  51. }
  52. return (current.val);
  53. }
  54.  
  55. /**
  56. * return the max value of the tree.
  57. * Runtime is ≤ O(lgN)
  58. * @return
  59. */
  60. public int getMax() {
  61.  
  62. Node current = root;
  63. while (current.right != null) {
  64. current = current.right;
  65. }
  66. return (current.val);
  67. }
  68.  
  69. /**
  70. * delete element from the tree.
  71. * Runtime is ≤ O(lgN)
  72. * @param val
  73. * @return true if successfully removed. otherwise return false.
  74. */
  75. public boolean delete(int val){
  76.  
  77. try {
  78. if (deletion(root, val) != null) {
  79. return true;
  80. } else {
  81. return false;
  82. }
  83. }
  84. catch (Exception e){
  85. return false;
  86. }
  87. }
  88.  
  89. private Node deletion(Node root, int val){
  90. if(val < root.val) root.left = deletion(root.left, val);
  91. else if(val > root.val) root.right = deletion(root.right, val);
  92. else
  93. {
  94. if(root.getLeft() == null && root.getRight() == null)
  95. {
  96. return null;
  97. }
  98. else if(root.getLeft() == null)
  99. {
  100. // node with one node (no left node)
  101. return root.getRight();
  102. }
  103. else if(root.getRight() == null)
  104. {
  105. // node with one node (no right node)
  106. return root.getLeft();
  107. }
  108. }
  109. return root;
  110. }
  111.  
  112. /**
  113. * insert element into the tree.
  114. * Runtime is ≤ O(lgN)
  115. * @param val
  116. * @return true if successfully added. otherwise return false.
  117. */
  118.  
  119. boolean insert(int val) {
  120.  
  121. if (insertion(root, val) == null) {
  122. return true;
  123. } else {
  124.  
  125. root = insertion(root, val);
  126. return false;
  127. }
  128. }
  129.  
  130. private Node insertion(Node root, int val) {
  131.  
  132. if (root == null) {
  133. root = new Node(val);
  134. stack.push(val);
  135. return root;
  136. }
  137. if (val < root.val) {
  138. root.left = insertion(root.left, val);
  139. if(stack.peek() == val) {stack.pop();} //here
  140. stack.push(val);
  141. } else if (val > root.val) {
  142. root.right = insertion(root.right, val);
  143. if(stack.peek() == val) {stack.pop();} //here
  144. stack.push(val);
  145. }
  146.  
  147. return root;
  148.  
  149. }
  150.  
  151. /**
  152. * delete the last inserted element.
  153. * Runtime is ≤ O(lgN)
  154. * @return
  155. */
  156. public int removeLast() {
  157. return stack.pop();
  158. }
  159.  
  160. public void inorder() {
  161. inorderRec(root);
  162. }
  163.  
  164. // A utility function to do inorder traversal of BST
  165. void inorderRec(Node root) {
  166. if (root != null) {
  167. inorderRec(root.left);
  168. System.out.println(root.val);
  169. inorderRec(root.right);
  170. }
  171. }
  172.  
  173. public static void main(String[] args) throws Exception{
  174. //example1
  175. OrderedBSTree tree = new OrderedBSTree();
  176. tree.insert(15);
  177. tree.insert(12);
  178. tree.insert(10);
  179. tree.insert(29);
  180. tree.insert(5);
  181. tree.insert(100);
  182. tree.insert(100);
  183. System.out.println(tree.getMax()); //100
  184. System.out.println(tree.getLast()); //100
  185. System.out.println(tree.removeLast()); //100
  186. System.out.println(tree.delete(100)); //false
  187. System.out.println(tree.getLast()); //5
  188. System.out.println(tree.getMin()); //5
  189. System.out.println(tree.getMax()); //29
  190. System.out.println(tree.delete(12)); //true
  191. System.out.println(tree.delete(12)); //false
  192. System.out.println(tree.insert(10)); //false
  193. System.out.println(tree.root.val);
  194. System.out.println();
  195. tree.inorder();
  196.  
  197.  
  198. }
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement