Изменения

Перейти к: навигация, поиск

Дерево поиска, наивная реализация

86 байт добавлено, 20:12, 30 мая 2015
Нет описания правки
Обе операции выполняются за время <tex>O(h)</tex>.
====Реализация без использования информации о родителе====
Если у узла есть правое поддерево, то следующий за ним элемент будет минимальным элементом в этом поддереве. Если у него нет правого поддерева, то начнем поиск от корня. Спускаемся вниз по дереву. Если значение узла больше значения в рассматриваемом в данный момент узле, перейдем в правое поддерево, иначе перейдем в левое поддерево. Аналогично выполняется поиск предыдущего элемента. Рекурсивные реализации Реализации обеих функций: '''Node''' next(x root : '''Node''', t x : '''Node'''): <font color="green">// x {{---}} элемент, для которого ищем следующий, t root {{---}} текущее поддеревокорень дерева</font> '''if''' t x.right != ''null'' '''Nodereturn''' successor = nextminimum(x, t.leftright) '''ifNode''' successor == ''null'' '''ifwhile''' t.key > x.key root != ''null'return''' t '''elseif'''x.value < root.value '''return''' successor= root root = root.left '''returnelse if''' next(x, t.value > root.value root = root.right) '''returnelse''' break '' 'return'null''successor
'''Node''' prev(x root : '''Node''', t x : '''Node'''): <font color="green">// x {{---}} элемент, для которого ищем предыдущийследующий, t root {{---}} текущее поддеревокорень дерева</font> '''if''' t x.left != ''null'' '''Nodereturn''' ancestor = prevmaximum(x, t.rightleft) '''ifNode''' ancestor == ''null'' '''ifwhile''' t.key <root != x.key '''return'null'' t '''elseif'''x.value > root.value '''return''' ancestor= root root = root.right '''returnelse if''' prev(x, t.value < root.value root = root.left) '''returnelse''' break '' 'return'null''ancestor
Обе операции выполняются за время <tex>O(h)</tex>.
=== Вставка ===
188
правок

Навигация