Advertisement
Guest User

Untitled

a guest
Apr 1st, 2015
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.61 KB | None | 0 0
  1.  
  2. public class AVLTree
  3. {
  4. private Node root;
  5.  
  6. private class Node{
  7. private int val;
  8. private Node left, right;
  9.  
  10. public Node(int val)
  11. {
  12. this.val = val;
  13. }
  14.  
  15. public Node getLeft()
  16. {
  17. return left;
  18. }
  19.  
  20. public Node getRight()
  21. {
  22. return right;
  23. }
  24.  
  25. public int getVal()
  26. {
  27. return val;
  28. }
  29.  
  30. public void setLeft(Node node)
  31. {
  32. left = node;
  33. }
  34.  
  35. public void setRight(Node node)
  36. {
  37. right = node;
  38. }
  39.  
  40. public void setVal(int x)
  41. {
  42. val = x;
  43. }
  44.  
  45. }
  46.  
  47. public void add(int n)
  48. {
  49. if (root == null) { root = new Node(n); }
  50. else { add(root, n); }
  51. }
  52.  
  53. public void add(Node node, int n)
  54. {
  55. if (n == node.getVal()) {
  56. System.out.println("Already exists");
  57. return; }
  58. else if (n < node.getVal()) {
  59. if (node.getLeft() == null) { node.setLeft(new Node(n)); }
  60. else { add(node.getLeft(), n); }
  61. }
  62.  
  63. else if (n > node.getVal()) {
  64. if (node.getRight() == null) { node.setRight(new Node(n)); }
  65. else { add(node.getRight(), n); }
  66. }
  67. }
  68.  
  69. public boolean search(int n)
  70. {
  71. if (root.getVal() == n) { return true; }
  72. else { search(root, n); }
  73.  
  74. return false;
  75. }
  76.  
  77. public boolean search(Node node, int n)
  78. {
  79. if (n == node.getVal()) { return true; }
  80. else if (n < node.getVal()) {
  81. if (node.getLeft() == null) { return false; }
  82. else { search(node.getLeft(), n); }
  83. }
  84. else if (n > node.getVal()) {
  85. if (node.getRight() == null) { return false; }
  86. else { search(node.getRight(), n); }
  87. }
  88.  
  89. return false;
  90. }
  91.  
  92. public int remove(int n)
  93. {
  94. if (root == null) {
  95. System.out.println("empty tree");
  96. return -1;
  97. }
  98. else { remove(root, n); }
  99.  
  100. return 0;
  101. }
  102.  
  103. public void remove(Node node,int n)
  104. {
  105. if (node.getVal() == n)
  106. {
  107. if (isLeaf(node)) // if node is leaf
  108. {
  109. node = null;
  110. }
  111.  
  112. else if (hasTwoChildren(node)) // if node has 2 children
  113. {
  114. if (isLeaf(node.getRight()))
  115. {
  116. swapNode(node, node.getRight());
  117. remove(node.getRight(), node.getRight().getVal());
  118. }
  119. else if (node.getRight().getLeft() != null)
  120. {
  121. swapNode(node, node.getRight().getLeft());
  122. remove(node.getRight().getLeft(), node.getRight().getLeft().getVal());
  123. }
  124. else if (node.getRight().getRight() != null)
  125. {
  126. swapNode(node, node.getRight());
  127. remove(node.getRight(), node.getRight().getVal());
  128. }
  129. }
  130.  
  131.  
  132. }
  133. else if (n < node.getVal())
  134. {
  135. if (isLeaf(node.getLeft()))
  136. {
  137. node.setLeft(null);
  138. }
  139. else
  140. {
  141. remove(node.getLeft(), n);
  142. }
  143. }
  144. else if (n > node.getVal())
  145. {
  146. if (isLeaf(node.getRight()))
  147. {
  148. node.setRight(null);
  149. }
  150. else
  151. {
  152. remove(node.getRight(), n);
  153. }
  154. }
  155. }
  156.  
  157. public boolean isLeaf(Node node)
  158. {
  159. if (node.getRight() == null && node.getLeft() == null) { return true; }
  160. return false;
  161. }
  162.  
  163. public boolean hasTwoChildren(Node node)
  164. {
  165. if (node.getRight() != null && node.getLeft() != null) { return true; }
  166. return false;
  167. }
  168.  
  169. public void swapNode(Node n1, Node n2)
  170. {
  171. int x1 = n1.getVal();
  172. int x2 = n2.getVal();
  173.  
  174. n1.setVal(x2);
  175. n2.setVal(x1);
  176. }
  177.  
  178. public void printTree()
  179. {
  180. if (root == null) { return; }
  181. else {
  182. printTree(root, 0);
  183. }
  184. }
  185.  
  186. public void printTree(Node node, int n)
  187. {
  188. String s = "";
  189. for (int i = 0; i < n; i++)
  190. {
  191. s += " ";
  192. }
  193.  
  194. if (node.getRight() != null)
  195. {
  196. printTree(node.getRight(), n + 1);
  197. }
  198.  
  199. s += node.val;
  200. System.out.println(s);
  201.  
  202. if (node.getLeft() != null)
  203. {
  204. printTree(node.getLeft(), n + 1);
  205. }
  206. }
  207.  
  208. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement