Сложность пространства-предшественника бинарного дерева поиска

#binary-search-tree #computer-science

#двоичное дерево поиска #информатика

Вопрос:

Я изучаю бинарные деревья поиска и не смог найти много информации о пространстве, необходимом для поиска предшественника данного узла. Основываясь на итеративном подходе, я полагаю, что мне понадобилось бы O (1) пробел (на месте), потому что нам нужна только одна переменная плюс один узел в стеке. Чтобы выполнить это рекурсивно, нам пришлось бы поддерживать стек. Поскольку возможно перейти к самому левому / минимальному узлу, возможно, что мы пройдем всю высоту двоичного дерева поиска. Следовательно, сложность пространства для этого будет равна O (h).

Верны ли эти предположения или я что-то упускаю?

Ответ №1:

Имейте в виду, что каждый рекурсивный вызов уменьшает высоту, и для каждого значения высоты выполняется только один вызов. Следовательно, мы можем выполнять итеративный поиск.

Пусть n1, n2 будут такими узлами, которые n2 являются корнем и n1 равны нулю. Пусть v будет узел, который вы ищете

В то время как n2 не v :

  • n1 := n2
  • если v.value > n2.value , n2 := n2.right
  • еще n2 := n.left

Возврат n1

Я сохранил постоянное количество (2) указателей, поэтому сложность O(1) .