Чтобы получить быстрый двоичный поиск в связном списке, нужно, чтобы каждый его элемент хранил, помимо указателей на своих соседей, указатель на середины правой и левой половин списка
Для каждого узла все элементы в его левом поддереве меньше него, а элементы в правом поддереве больше или равны ему
Для двоичного дерева поиска могут быть эффективно реализованы следующие операции:
Чтобы найти элемент с заданным ключом, в дереве выполняется следующий алгоритм:
Сложность поиска максимального и минимального элементов – $O(h)$, т.к. посещённые при поиске узлы образуют простой нисходящий путь
Пунктирными стрелками на рисунке представлены пути обхода дерева для поиска элементов 8 (удачного) и 14 (неудачного).
На данном слайде представлен поиск места для вставки элемента в дерево для существующего (7) и несуществующего (14) элементов
На данном слайде представлено состояние дерева после вставки элементов 7 и 14
В случае, если удаляемый узел является листом (не имеет потомков), он просто исключается из дерева, а на его место ставится $NULL$
Удаляемый узел $z$ имеет только левого потомка (для правого аналогично)
Когда удаляемый узел имеет двух потомков, возможны две подситуации:
Обе ситуации можно обобщить одним правилом:
Вычислительная сложность удаления элемента из дерева в любом из случаев составляет $$O(h)$$
Поиск следующего по возрастанию элемента учитывает два случая: