Иерархическая структура данных из узлов, где каждый узел имеет родителя и потомков.
Зачем нужно
- Моделирование иерархий (DOM, файловая система, меню)
- Быстрый поиск и сортировка (BST: O(log n))
- Основа для алгоритмов парсинга (AST)
Где используется
- DOM-дерево в браузере, файловые системы, базы данных (B-tree), JSON/XML парсинг
Терминология
| Термин |
Значение |
| Root |
Корень -- верхний узел |
| Node |
Узел с данными |
| Leaf |
Лист -- узел без потомков |
| Depth |
Глубина -- расстояние от корня |
| Height |
Высота -- макс. глубина дерева |
Бинарное дерево поиска (BST)
class TreeNode<T> {
value: T;
left: TreeNode<T> | null = null;
right: TreeNode<T> | null = null;
constructor(value: T) { this.value = value; }
}
class BST {
root: TreeNode<number> | null = null;
insert(val: number) {
const node = new TreeNode(val);
if (!this.root) { this.root = node; return; }
let curr = this.root;
while (true) {
if (val < curr.value) {
if (!curr.left) { curr.left = node; return; }
curr = curr.left;
} else {
if (!curr.right) { curr.right = node; return; }
curr = curr.right;
}
}
}
search(val: number): boolean {
let curr = this.root;
while (curr) {
if (val === curr.value) return true;
curr = val < curr.value ? curr.left : curr.right;
}
return false;
}
}
Обходы дерева
function inOrder(node: TreeNode<number> | null): number {
if (!node) return ;
return [...inOrder(node.left), node.value, ...inOrder(node.right)];
}
Сложность BST
| Операция |
Среднее |
Худшее |
| Поиск |
O(log n) |
O(n) |
| Вставка |
O(log n) |
O(n) |
| Удаление |
O(log n) |
O(n) |
Связанные темы
Ресурсы