Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.11 KB | None | 0 0
  1. package lab7;
  2.  
  3. public class AVLTree {
  4.  
  5. public TreeNode root;
  6.  
  7. /**
  8. * Default constructor
  9. */
  10. public AVLTree() {
  11. root = null;
  12. }
  13.  
  14. /**
  15. * Method to perform right rotation
  16. */
  17. private TreeNode rightRotate(TreeNode oldParent) {
  18.  
  19. // YOUR CODE HERE// completed
  20. TreeNode y = oldParent.left;
  21. TreeNode y2 = y.right;
  22.  
  23. y.right = oldParent;
  24. oldParent.left = y2;
  25.  
  26. oldParent.height = Math.max(height(oldParent.left), height(oldParent.right)) + 1;
  27. y.height = Math.max(height(y.left), height(y.right)) + 1;
  28. return y;
  29. }
  30.  
  31. /**
  32. * Method to perform left rotation
  33. */
  34. private TreeNode leftRotate(TreeNode oldParent) {
  35.  
  36. // YOUR CODE HERE// completed
  37. TreeNode y = oldParent.right;
  38. TreeNode y2 = y.left;
  39.  
  40. y.left = oldParent;
  41. oldParent.right = y2;
  42. oldParent.height = Math.max(height(oldParent.left), height(oldParent.right)) + 1;
  43. y.height = Math.max(height(y.left), height(y.right)) + 1;
  44.  
  45. return y;
  46. }
  47.  
  48. /**
  49. * Method to calculate the height of a tree
  50. */
  51. public int height() {
  52. return height(root);
  53. }
  54.  
  55. // Recursive height
  56. private int height(TreeNode node) {
  57.  
  58. // YOUR CODE HERE // completed
  59. if (node == null) {
  60. return 0;
  61. } else {
  62. int left = height(node.left);
  63. int right = height(node.right);
  64.  
  65. if (left > right) {
  66. return left++;
  67. } else {
  68. return right++;
  69. }
  70. }
  71.  
  72. }
  73.  
  74. /**
  75. * Method to remove a key from the tree
  76. */
  77. public void remove(int key) {
  78. if (root == null) {
  79. System.out.println("Tree is empty.");
  80. return;
  81. }
  82. root = removeRecursive(root, key);
  83. }
  84.  
  85. // Recursive remove
  86. public TreeNode removeRecursive(TreeNode node, int key) {
  87.  
  88. // YOUR CODE HERE
  89. if (node == null) {
  90. return node;
  91. }
  92. if (key < node.data) {
  93. node.left = removeRecursive(node.left, key);
  94. } else if (key > node.data) {
  95. node.right = removeRecursive(node.right, key);
  96. } else {
  97. if (node.left == null || node.right == null) {
  98. TreeNode t;
  99. if (node.left != null) {
  100. t = node.left;
  101. } else {
  102. t = node.right;
  103. }
  104. if (t == null) {
  105. t = node;
  106. node = null;
  107. } else {
  108. node = t;
  109.  
  110. }
  111. t = null;
  112.  
  113. } else {
  114. TreeNode t = smallest(node.right);
  115. node.data = t.data;
  116. node.right = removeRecursive(node.right, t.data);
  117.  
  118. }
  119. }
  120. if (node == null) {
  121. return node;
  122. }
  123. node.height = Math.max(height(node.left), height(node.right)) + 1;
  124.  
  125. int balance = getBalance(node);
  126.  
  127. if (balance > 1 && getBalance(node.left) >= 0) {
  128. return rightRotate(node);
  129. }
  130. if (balance > 1 && getBalance(node.left) < 0) {
  131. node.left = leftRotate(node.left);
  132. return rightRotate(node);
  133. }
  134.  
  135. if (balance < -1 && getBalance(node.right) <= 0) {
  136. return leftRotate(node);
  137. }
  138. if (balance < -1 && getBalance(node.right) > 0) {
  139. node.right = rightRotate(node.right);
  140. return leftRotate(node);
  141. }
  142.  
  143. return node;
  144.  
  145. }
  146.  
  147. /**
  148. * Method to add an item to the tree
  149. */
  150. public void add(int key) {
  151. root = addRecursive(root, key);
  152. }
  153.  
  154. // Recursive add
  155. public TreeNode addRecursive(TreeNode node, int key) {
  156.  
  157. // YOUR CODE HERE// complete
  158. if (node == null) {
  159. return new TreeNode(key);
  160. }
  161. if (key < node.data) {
  162. node.left = addRecursive(node.left, key);
  163. } else {
  164. node.right = addRecursive(node.right, key);
  165. }
  166.  
  167. node.height = Math.max(height(node.left), height(node.right)) + 1;
  168.  
  169. int balance = getBalance(node);
  170. if (balance > 1 && key < node.left.data) {
  171. return rightRotate(node);
  172. }
  173.  
  174. if (balance < -1 && key > node.right.data) {
  175. return leftRotate(node);
  176. }
  177.  
  178. if (balance > 1 && key > node.left.data) {
  179. node.left = leftRotate(node.left);
  180. return rightRotate(node);
  181. }
  182.  
  183. if (balance < -1 && key < node.left.data) {
  184. node.right = leftRotate(node.right);
  185. return leftRotate(node);
  186. }
  187.  
  188. return node;
  189. }
  190.  
  191. /**
  192. * Method to calculate the balance factor of node N
  193. */
  194. int getBalance(TreeNode N) {
  195.  
  196. // YOUR CODE HERE // completed
  197. if (N == null) {
  198. return 0;
  199. }
  200. return height(N.left) - height(N.right);
  201. }
  202.  
  203. //------------------------------DO NOT CHANGE THE CODE BELOW------------------------------
  204. /**
  205. * A method to find the smallest item from the tree
  206. */
  207. private TreeNode smallest(TreeNode node) {
  208. if (node != null && node.left != null) {
  209. return smallest(node.left);
  210. }
  211. return node;
  212. }
  213.  
  214. /**
  215. * Method to show the tree
  216. */
  217. @Override
  218. public String toString() {
  219.  
  220. if (root == null) {
  221. return "Tree is empty";
  222. }
  223.  
  224. return toString(root);
  225. }
  226.  
  227. public String toString(TreeNode current) {
  228. String resutls = "";
  229.  
  230. if (current != null) {
  231. String left = toString(current.left);
  232. String right = toString(current.right);
  233. if (left != "") {
  234. resutls += "(" + left + ")";
  235. }
  236. resutls += current.data;
  237. if (right != "") {
  238. resutls += "(" + right + ")";
  239. }
  240. }
  241. return resutls;
  242. }
  243.  
  244. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement