DEV//UNIT
← Алгоритмыdata-structures

AVL-дерево

BST, которое само себя балансирует: высота всегда O(log n).

время O(log n)память O(n)уровень: средний
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1class AVLNode {
2 value: number
3 left: AVLNode | null = null
4 right: AVLNode | null = null
5 height = 1
6
7 balance(): number {
8 return h(this.right) - h(this.left)
9 }
10}
11
12function insert(node: AVLNode | null, v: number): AVLNode {
13 if (node === null) return new AVLNode(v)
14 if (v < node.value) node.left = insert(node.left, v)
15 else node.right = insert(node.right, v)
16
17 node.height = 1 + Math.max(h(node.left), h(node.right))
18
19 const b = node.balance()
20 if (b < -1 && v < node.left!.value) return rotateRight(node) // LL
21 if (b > 1 && v > node.right!.value) return rotateLeft(node) // RR
22 if (b < -1) { node.left = rotateLeft(node.left!); return rotateRight(node) } // LR
23 if (b > 1) { node.right = rotateRight(node.right!); return rotateLeft(node) } // RL
24
25 return node
26}

Проблема

BST, которое само себя балансирует: высота всегда O(log n).

Что вы видите

Баланс каждого узла ∈ [−1, 1]; нарушение — поворот LL/RR/LR/RL.

Как это работает

Высота ≤ 1.44·log₂(n) — гарантия. Вставка/удаление с O(log n) поворотами. Строгость баланса = быстрее поиск, дороже вставка (vs красно-чёрные).

Пошаговый разбор

  1. 01

    Баланс

    h(R) − h(L).

  2. 02

    LL/RR

    Один поворот.

  3. 03

    LR/RL

    Два поворота.

Complexity и ограничения

time
O(log n)
space
O(n)

Сложность см. в шапке страницы.

Edge cases

  • Пустой вход

    Корректная тривиальная обработка.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

std::map

Красно-чёрные родственники.

БД

Индексы в памяти.

Словари

Гарантия log n.

Связанные алгоритмы

Shorts

«Дерево, которое не вытягивается в список»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

Дерево, которое не вытягивается в список
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/avl