Rotacja w prawo
Lekcja 7 z 16 w kursie Drzewo AVL – struktury danych, seria #10 w Coddy.
Gdy lewa strona węzła jest zbyt wysoka, naprawia to rotacja w prawo. Oznacz niezrównoważony węzeł jako y, a jego lewe dziecko jako x. Rotacja przenosi x na miejsce y: x staje się nowym korzeniem poddrzewa, y staje się prawym dzieckiem x, a dawne prawe poddrzewo x (oznaczmy je jako T2) zostaje ponownie dołączone jako nowe lewe dziecko y, ponieważ każda wartość w T2 nadal jest większa od x i mniejsza od y.
Po ponownym połączeniu wskaźników trzeba przeliczyć height zarówno dla y, jak i x, zaczynając od y, ponieważ teraz znajduje się niżej w drzewie.
Wyzwanie
ŁatwyNapisz metodę rotateRight(y) w klasie AVLTree. Niech x = y.left, a T2 = x.right. Ustaw x.right = y i y.left = T2, ponownie oblicz height węzła y, a następnie x, jako 1 + max(getHeight(left), getHeight(right)), i zwróć x jako nowy korzeń poddrzewa.
Spróbuj swoich sił
#include <stdio.h>
#include <string.h>
#include "avltree.h"
int main(void) {
AVLTree* tree = AVLTree_create();
char line[256];
while (fgets(line, sizeof(line), stdin) != NULL) {
line[strcspn(line, "\r\n")] = '\0';
if (strcmp(line, "1") == 0) {
Node* y = Node_create(30);
y->height = 3;
Node* x = Node_create(20);
x->height = 2;
Node* t1 = Node_create(10);
t1->height = 1;
x->left = t1;
y->left = x;
Node* newRoot = AVLTree_rotateRight(tree, y);
printf("%d %d %d %d\n", newRoot->value, newRoot->height, newRoot->left->value, newRoot->right->value);
}
if (strcmp(line, "2") == 0) {
Node* y = Node_create(50);
y->height = 3;
Node* x = Node_create(30);
x->height = 2;
x->left = Node_create(20);
x->left->height = 1;
x->right = Node_create(40);
x->right->height = 1;
y->left = x;
y->right = Node_create(60);
y->right->height = 1;
Node* newRoot = AVLTree_rotateRight(tree, y);
printf("%d %d %d %d %d %d\n", newRoot->value, newRoot->height, newRoot->left->value, newRoot->right->value, newRoot->right->left->value, newRoot->right->right->value);
}
}
return 0;
}
Wszystkie lekcje w sekcji Drzewo AVL – struktury danych, seria #10
2Projekt drzewa AVL
Klasa węzłaKlasa AVLTreePoćwicz samodzielnie: Kompilator C online