Sola Döndürme
Coddy'nin AVL Tree - Veri Yapıları Serisi #10 kursunda ders 8 / 16.
Bir sola döndürme, az önce yazdığınız sağa döndürmenin ayna görüntüsüdür ve bir düğümün sağ tarafı çok yüksek olduğunda kullanılır. Dengesiz düğüme x ve onun sağ çocuğuna y deyin. y yeni alt ağaç kökü olur, x, y'nin sol çocuğu olur ve y'nin eski sol alt ağacı (T2), x'in yeni sağ çocuğu olarak yeniden bağlanır.
Yükseklikler için aynı kural geçerlidir: önce x'i, sonra y'yi yeniden hesaplayın, çünkü x artık daha alttaki düğümdür.
Görev
KolayAVLTree üzerinde bir rotateLeft(x) metodu yazın. y = x.right ve T2 = y.left olsun. y.left = x ve x.right = T2 olarak ayarlayın, önce x sonra y düğümlerinin height değerini yeniden hesaplayın ve yeni alt ağaç kökü olarak y değerini döndürün.
Kendin dene
#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* x = Node_create(10);
x->height = 3;
Node* y = Node_create(20);
y->height = 2;
Node* t2 = Node_create(30);
t2->height = 1;
y->right = t2;
x->right = y;
Node* newRoot = AVLTree_rotateLeft(tree, x);
printf("%d %d %d %d\n", newRoot->value, newRoot->height, newRoot->left->value, newRoot->right->value);
}
if (strcmp(line, "2") == 0) {
Node* x = Node_create(20);
x->height = 3;
Node* y = Node_create(40);
y->height = 2;
y->left = Node_create(30);
y->left->height = 1;
y->right = Node_create(50);
y->right->height = 1;
x->left = Node_create(10);
x->left->height = 1;
x->right = y;
Node* newRoot = AVLTree_rotateLeft(tree, x);
printf("%d %d %d %d %d %d\n", newRoot->value, newRoot->height, newRoot->left->value, newRoot->right->value, newRoot->left->left->value, newRoot->left->right->value);
}
}
return 0;
}
AVL Tree - Veri Yapıları Serisi #10 bölümündeki tüm dersler
2AVL Ağacı Projesi
Düğüm SınıfıAVLTree Sınıfı3Uygulama Alıştırmaları
K. En Küçük ElemanAralık ToplamıEn Düşük Ortak AtaSeviye Düzenli GezinmeBir Değerin Ardılı