Ответ
Двоичное дерево поиска (BST) — это древовидная структура данных на основе узлов, где каждый узел имеет не более двух дочерних элементов (левого и правого потомка).
Главное его предназначение — быстрый поиск, вставка и удаление элементов.
Ключевые свойства
Для любого узла N
в дереве должны выполняться следующие условия:
- Все значения в левом поддереве узла
N
меньше, чем значение вN
. - Все значения в правом поддереве узла
N
больше, чем значение вN
. - Оба — левое и правое — поддеревья также являются двоичными деревьями поиска.
Производительность
Благодаря этим свойствам, операции поиска, вставки и удаления в сбалансированном дереве выполняются в среднем за логарифмическое время O(log n).
- Средний случай:
O(log n)
- Худший случай:
O(n)
. Происходит, когда дерево вырождается в связный список (например, при последовательной вставке отсортированных элементов).
Пример реализации на Python
# Класс для представления узла дерева
class Node:
def __init__(self, key):
self.left = None
self.right = None
self.val = key
# Функция для поиска значения в дереве
def search(root, key):
# Базовые случаи: корень пуст или ключ найден
if root is None or root.val == key:
return root
# Ключ больше значения в корне -> ищем в правом поддереве
if root.val < key:
return search(root.right, key)
# Ключ меньше значения в корне -> ищем в левом поддереве
return search(root.left, key)
Для решения проблемы худшего случая используют самобалансирующиеся деревья, такие как АВЛ-деревья или Красно-чёрные деревья.