Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // funkcja usuwajaca
- private Node deleteNode(Node root, int value) {
- // Standardowe usuwanie bts
- if (root == null)
- return root;
- //wlasnosc z drzewa BST po lewej mniejsze po prawej wieksze
- if ( value < root.value )
- root.left = deleteNode(root.left, value);
- else if( value > root.value )
- root.right = deleteNode(root.right, value);
- //jezeli wartosc wezla jest rowna wartosci usuwanej to usuwamy
- else {
- // przypadek usuwania wezla z jednym synem lub bez jakiegokolwiek syna
- if( (root.left == null) || (root.right == null) ) {
- Node temp;
- if (root.left != null)
- temp = root.left;
- else
- temp = root.right;
- // przypadek bez syna, przepiecie dowiazania
- if(temp == null) {
- temp = root;
- root = null;
- }
- else
- // przypadek z jednym synem, przepiecie dowiazania syna na miejsce usuwanego ojca
- root = temp; // przepiecie dowiazania
- temp = null;
- }
- else {
- // przypadek kiedy usuwany element ma dwojka synow
- // wyszukanie nastepnika, minimum z prawego podrzewa
- Node temp = minValueNode(root.right);
- // nastepnik przepisywany jest jako korzen, zamiana korzenia z nastepnikiem
- root.value = temp.value;
- // usuniecie elementu
- root.right = deleteNode(root.right, temp.value);
- }
- }
- // przypadek tylko jednego wezla
- if (root == null)
- return root;
- // aktualizacja wysokosci
- root.height = Math.max(height(root.left), height(root.right)) + 1;
- // sprawdzenie czy wymagane jest balansowanie drzewa , sprawdzajac wage
- int balance = getBalance(root);
- // W przypadku wymaganego balansowania drzewa istnieja 4 przypadki
- // rotacja LL
- if (balance > 1 && getBalance(root.left) >= 0)
- return rightRotate(root);
- // rotacja LR
- if (balance > 1 && getBalance(root.left) < 0) {
- root.left = leftRotate(root.left);
- return rightRotate(root);
- }
- // rotacja RR
- if (balance < -1 && getBalance(root.right) <= 0)
- return leftRotate(root);
- // Rotacja RL
- if (balance < -1 && getBalance(root.right) > 0) {
- root.right = rightRotate(root.right);
- return leftRotate(root);
- }
- return root;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement