Двоичное дерево поиска
Слева меньше, справа больше: поиск как в отсортированном массиве, вставка — как в списке.
1class BSTNode {2 value: number3 left: BSTNode | null = null4 right: BSTNode | null = null5 constructor(value: number) { this.value = value }6}7 8function insert(root: BSTNode | null, value: number): BSTNode {9 if (root === null) return new BSTNode(value)10 if (value < root.value) root.left = insert(root.left, value)11 else root.right = insert(root.right, value)12 return root13}14 15function search(root: BSTNode | null, value: number): BSTNode | null {16 let cur = root17 while (cur !== null) {18 if (value === cur.value) return cur19 cur = value < cur.value ? cur.left : cur.right20 }21 return null22}Проблема
Хотим и быстрый поиск, и дешёвые вставки. Массив даёт поиск, но вставка дорогая; список — наоборот. Дерево ищет по следу сравнений и вставляет листом.
Что вы видите
Узел вставляется спуском: меньше — влево, больше — вправо, до пустого места. Поиск — тот же спуск, каждый узел отбрасывает половину поддерева.
Как это работает
Инвариант BST: для каждого узла всё левое поддерево меньше, правое больше. Поиск/вставка/удаление — O(h). Если вставлять отсортированные данные — дерево вырождается в список (O(n)); сбалансированные деревья (AVL, красно-чёрные) держат h = O(log n).
Пошаговый разбор
- 01
Спуск
Сравнение с узлом: влево или вправо.
- 02
Вставка
Новый лист на конце пути.
- 03
Поиск
Тот же спуск до значения.
- 04
Баланс
Вырождение в список лечится поворотами.
Complexity и ограничения
O(h) на операции; O(log n) если сбалансировано, O(n) в вырожденном.
Edge cases
- Отсортированная вставка
Дерево-цепочка — худший случай.
- Удаление с двумя детьми
Замена на минимум правого поддерева.
- Дубликаты
Политика: направо или счётчиком.
Где встречается в реальности
Индексы БД
B-деревья — многопутевые наследники BST.
std::map
Красно-чёрные деревья в STL.
Интервалы
Деревья отрезков и диапазонные запросы.
Связанные алгоритмы
«Массив или список? Дерево. Смотри, как оно растёт»
Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.
Shorts 9:16
Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.