AVL Ağacı
Ağaçlar O(log n) O(n)Kendini dengeleyen bir İAA: her eklemeden sonra denge faktörlerini kontrol eder ve yükseklik O(log n) kalsın diye döndürür.
1/35
10 yeni bir yaprak olarak ekleniyor.
DeğişmezHer düğümün alt ağaç yükseklikleri en fazla 1 fark eder; bu yüksekliği O(log n) ve arama yolunu kısa tutar.
avl.c
int height(Node *n) { return n ? n->height : 0; }int bf(Node *n) {return n ? height(n->left) - height(n->right) : 0;}Node *rotateRight(Node *y) {Node *x = y->left;y->left = x->right;x->right = y;fixHeight(y); fixHeight(x);return x;}Node *rotateLeft(Node *x) {Node *y = x->right;x->right = y->left;y->left = x;fixHeight(x); fixHeight(y);return y;}Node *insert(Node *n, int key) {if (!n) return newNode(key);if (key < n->key) n->left = insert(n->left, key);else n->right = insert(n->right, key);fixHeight(n);int b = bf(n);if (b > 1 && key < n->left->key)return rotateRight(n);if (b < -1 && key > n->right->key)return rotateLeft(n);if (b > 1 && key > n->left->key) {n->left = rotateLeft(n->left);return rotateRight(n);}if (b < -1 && key < n->right->key) {n->right = rotateRight(n->right);return rotateLeft(n);}return n;}
AVL Ağacı nasıl çalışır?
Her eklemeden sonra düğümlerin denge faktörünü ölçen ve ±2 eğilmeyi bir-iki döndürmeyle onaran bir İAA. Yükseklik 1.44·log n içinde kalır; yürüyüşler logaritmik kalır.
Ne zaman kullanılır?
Katı O(log n) aramanın ucuz yazmadan önemli olduğu, okuma ağırlıklı sıralı eşlemeler.