Zovšeobecnenie spojkového zoznamu, kde jeden prvok má viac smerníkov.
left +------+ right
+--- | 5 | ----+
| +------+ |
v V
left +------+ +------+
+----| 3 | | 10 |
| +------+ +------+
|
V
+------+
| 1 |
+------+
Vkladanie prvkov v určitom poradí môže spôsobiť, že na jednej strane môže byť podstatne viac prvkov ako na druhej.
WARNING: Binárny strom sa môže degradovať na spojkový zoznam. Operácia vyhľadávania bude mať lineárnu a nie logaritmickú zložitosť.
Výška 3
left +-----+
+--- | 1 |
| +-----+
v
left +------+
+----| 2 |
| +------+
V
+------+
| 3 |
+------+
Operácia ktorá zmení štruktúru stromu, ale nezmení poradie prvkov pri prechádzaní INORDER:
https://en.wikipedia.org/wiki/Tree_rotation
ROOT ľavá rotácia PIVOT
/ \ => / \
A PIVOT ROOT C
/ \ / \
B C A B
struct node* rotate_left(struct node* parent){
struct node* pivot = parent->right;
assert(pivot != NULL);
parent->right = pivot->left;
pivot->left = parent;
return pivot;
}
ROOT pravá rotácia PIVOT
/ \ => / \
PIVOT C A ROOT
/ \ / \
A B B C
struct node* rotate_right(struct node* parent){
struct node* pivot = parent->left;
assert(pivot != NULL);
parent->left = pivot->right;
pivot->right = parent;
return pivot;
}
Pri vkladaní a vyberaní prvkov sa strom vyvažuje pomocou rotácií.
Koeficient vyváženia:: rozdiel medzi výškou pravého a ľavého syna.
Každý uzol AVL stromu má koeficient vyváženia -1, 0 alebo 1.
log(n)
.