💻Деревья

Деревья — иерархические структуры данных. BST: поиск за O(log n). AVL и красно-чёрные — самобалансирующиеся. B-деревья — основа PostgreSQL и MySQL.

📖2 мин чтения📊Уровень 5🗺️12 подтем📅16 апреля 2026 г.

Загрузка карты...

Дерево — иерархическая структура данных: один корень, каждый узел имеет родителя и любое число потомков, циклов нет. Основа баз данных, файловых систем и компиляторов.

Дерево — это граф без циклов

Файловая система на компьютере — дерево. Дерево решений в машинном обучении — дерево. HTML-страница (DOM) — дерево. Иерархия папок, XML, JSON — везде деревья.

Дерево: один корень, каждый узел имеет родителя (кроме корня) и любое число детей. Нет циклов. Это делает деревья идеальными для иерархических данных и быстрого поиска.

Бинарное дерево поиска (BST)

Самая простая форма. Правило: левый ребёнок меньше родителя, правый — больше. Поиск, вставка, удаление — все O(h), где h — высота дерева.

Если дерево сбалансировано — h = log n. Из миллиона элементов найдёшь за 20 шагов. Но BST без балансировки может деградировать: если вставлять элементы по возрастанию, получится список, h = n, всё за O(n).

Сравнение деревьев

СтруктураПоискВставкаПамятьПрименение
BST (несбалансированный)O(n)*O(n)*O(n)Учебные задачи
AVLO(log n)O(log n)O(n)Частое чтение
Красно-чёрноеO(log n)O(log n)O(n)STL, TreeMap
B-деревоO(log n)O(log n)O(n)Базы данных, диск
TrieO(m)O(m)O(n·m)Строки, автодополнение
Heap (куча)O(n)O(log n)O(n)Очереди с приоритетами

Сравнительная таблица: анализ различий

AVL-деревья: автоматический баланс

Придуманы советскими математиками Адельсоном-Вельским и Ландисом в 1962 году — первое самобалансирующееся дерево. Правило: разница высот левого и правого поддерева любого узла — не более 1. При нарушении — автоматический поворот.

Гарантирует h = O(log n) всегда. Поиск чуть медленнее красно-чёрного из-за частых поворотов, но идеален для задач с частым чтением.

Красно-чёрные деревья

Более relaxed балансировка: высота гарантированно не больше 2 log n. Это чуть менее строго, чем AVL, зато вставка и удаление требуют меньше поворотов — быстрее на запись.

Используются везде: C++ STL (map, set), Java TreeMap, Linux планировщик задач (CFS). Внутри большинства языковых стандартных библиотек — красно-чёрные деревья.

B-деревья: для дисков и баз данных

BST, AVL, красно-чёрные — для оперативной памяти. Когда данных больше, чем помещается в RAM, нужно читать с диска. Диск в тысячи раз медленнее памяти.

B-дерево — многопутевое: каждый узел хранит сотни ключей и имеет сотни детей. Высота дерева при миллиарде записей — всего 3–4. Три чтения с диска вместо 30. PostgreSQL, MySQL, MongoDB — все используют B-деревья или B+-деревья для индексов.

Trie: специализация для строк

Prefix tree (Trie) — каждый узел — символ. Слово — путь от корня. Поиск слова «apple» — 5 шагов независимо от словаря. Используется: автодополнение, поиск по префиксу, словарные проверки. Google подсказывает поисковые запросы именно так.

Высота дерева с 1 млн элементов

32500025000027500011000000100000020403BST (несбаланс.)AVLКрасно-чёрноеB-дерево (100)СтруктураВысота (шагов)
Высота (шагов)

Как выбрать структуру

Частый поиск, редкая запись — AVL. Частая запись — красно-чёрное дерево. Данные на диске — B-дерево. Работа со строками — Trie. Просто нужна очередь с приоритетами — Heap (куча).

Часто задаваемые вопросы

Без неё дерево может стать «списком» высотой n. Поиск займёт O(n) вместо O(log n). Балансировка гарантирует высоту O(log n) всегда.