Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.72 KB | None | 0 0
  1. // funkcja usuwajaca
  2. private Node deleteNode(Node root, int value) {
  3.  
  4. // Standardowe usuwanie bts
  5. if (root == null)
  6. return root;
  7.  
  8. //wlasnosc z drzewa BST po lewej mniejsze po prawej wieksze
  9. if ( value < root.value )
  10. root.left = deleteNode(root.left, value);
  11. else if( value > root.value )
  12. root.right = deleteNode(root.right, value);
  13.  
  14. //jezeli wartosc wezla jest rowna wartosci usuwanej to usuwamy
  15.  
  16. else {
  17. // przypadek usuwania wezla z jednym synem lub bez jakiegokolwiek syna
  18. if( (root.left == null) || (root.right == null) ) {
  19.  
  20. Node temp;
  21. if (root.left != null)
  22. temp = root.left;
  23. else
  24. temp = root.right;
  25.  
  26. // przypadek bez syna, przepiecie dowiazania
  27. if(temp == null) {
  28. temp = root;
  29. root = null;
  30. }
  31. else
  32. // przypadek z jednym synem, przepiecie dowiazania syna na miejsce usuwanego ojca
  33. root = temp; // przepiecie dowiazania
  34.  
  35. temp = null;
  36. }
  37. else {
  38. // przypadek kiedy usuwany element ma dwojka synow
  39. // wyszukanie nastepnika, minimum z prawego podrzewa
  40. Node temp = minValueNode(root.right);
  41.  
  42. // nastepnik przepisywany jest jako korzen, zamiana korzenia z nastepnikiem
  43. root.value = temp.value;
  44.  
  45. // usuniecie elementu
  46. root.right = deleteNode(root.right, temp.value);
  47. }
  48. }
  49.  
  50. // przypadek tylko jednego wezla
  51. if (root == null)
  52. return root;
  53.  
  54. // aktualizacja wysokosci
  55. root.height = Math.max(height(root.left), height(root.right)) + 1;
  56.  
  57. // sprawdzenie czy wymagane jest balansowanie drzewa , sprawdzajac wage
  58. int balance = getBalance(root);
  59.  
  60. // W przypadku wymaganego balansowania drzewa istnieja 4 przypadki
  61.  
  62. // rotacja LL
  63. if (balance > 1 && getBalance(root.left) >= 0)
  64. return rightRotate(root);
  65.  
  66. // rotacja LR
  67. if (balance > 1 && getBalance(root.left) < 0) {
  68. root.left = leftRotate(root.left);
  69. return rightRotate(root);
  70. }
  71.  
  72. // rotacja RR
  73. if (balance < -1 && getBalance(root.right) <= 0)
  74. return leftRotate(root);
  75.  
  76. // Rotacja RL
  77. if (balance < -1 && getBalance(root.right) > 0) {
  78. root.right = rightRotate(root.right);
  79. return leftRotate(root);
  80. }
  81.  
  82. return root;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement