Guest User

Untitled

a guest
Apr 26th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.96 KB | None | 0 0
  1. void remove(E elem) {
  2. System.out.println("Remove: ");
  3. if(root == null) return;
  4. if(elem == null) return;
  5. if(!contains(elem)){
  6. return;
  7. }
  8. Node<E> parent = null;
  9. Node<E> z = root;
  10.  
  11. while(!(elem.equal(z.contents))){
  12. parent = z;
  13. if(elem.lessOrEqual(z.contents)){
  14. z = z.left;
  15. }else{
  16. z = z.right;
  17. }
  18. }
  19.  
  20. if(z.left == null && z.right == null){ //uzel nema potomky
  21. if(parent == null){
  22. root = null;
  23. return;
  24. }
  25.  
  26. if(parent.left!=null){
  27. if(parent.left.equals(z)){
  28. parent.left = null;
  29. return;
  30. }
  31. }
  32. if(parent.right!=null){
  33. if(parent.right.equals(z)){
  34. parent.right = null;
  35. return;
  36. }
  37. }
  38.  
  39. }
  40.  
  41. if((z.left!= null && z.right == null)||(z.left == null && z.right != null)){ //uzel ma jen jednoho potomka
  42. if(z.right == null){
  43. z.left.setParent(parent);
  44. if(parent == null){
  45. z.left = root;
  46. return;
  47. }
  48. if(parent.left!=null){
  49. if(parent.left.equals(z)){
  50. parent.left = z.left;
  51. return;
  52. }
  53. }
  54. if(parent.right!=null){
  55. if(parent.right.equals(z)){
  56. parent.right = z.left;
  57. return;
  58. }
  59. }
  60.  
  61. }else{
  62. z.right.setParent(parent);
  63. if(parent == null){
  64. z.right = root;
  65. return;
  66. }
  67. if(parent.left!=null){
  68. if(parent.left.equals(z)){
  69. parent.left = z.right;
  70. return;
  71. }
  72. }
  73. if(parent.right!=null){
  74. if(parent.right.equals(z)){
  75. parent.right = z.right;
  76. return;
  77. }
  78. }
  79.  
  80. }
  81. }
  82.  
  83.  
  84.  
  85. if(z.left != null && z.right != null){ //mazany uzel ma oba potomky
  86. Node<E> maxPar = z;
  87. //Node<E> help4 = z;
  88. Node<E> max;
  89. max = z.left;
  90. while(max.right != null){
  91. max = max.right;
  92. }
  93. if(z.left.equals(max)){ //maximum leveho podstromu z je hned z.left
  94. max.right = z.right;
  95. z.right.setParent(max);
  96. max.setParent(parent);
  97. if(parent == null){
  98. root = max;
  99. return;
  100. }
  101. if(parent.left!=null){
  102. if(parent.left.equals(z)){
  103. parent.left = max;
  104. return;
  105. }
  106. }
  107. if(parent.right!=null){
  108. if(parent.right.equals(z)){
  109. parent.right = max;
  110. return;
  111. }
  112. }
  113. return;
  114. }else{ //maximum leveho podstromu je az nekde na z.left.right..right
  115. maxPar = maxPar.left;
  116. while(maxPar.right.right != null){
  117. maxPar = maxPar.right;
  118. }
  119. z.left.setParent(max);
  120. z.right.setParent(max);
  121. max.setParent(parent);
  122. if(max.left != null){
  123. max.left.setParent(maxPar);
  124. }
  125. maxPar.right = max.left;
  126. max.left = z.left;
  127. max.right = z.right;
  128. if(parent == null){
  129. root = max;
  130. return;
  131. }
  132. if(parent.left!=null){
  133. if(parent.left.equals(z)){
  134. parent.left = max;
  135. return;
  136. }
  137. }
  138. if(parent.right!=null){
  139. if(parent.right.equals(z)){
  140. parent.right = max;
  141. return;
  142. }
  143. }
  144. }
  145.  
  146. }
  147.  
  148. }
Add Comment
Please, Sign In to add comment