Имейте в виду, что каждый рекурсивный вызов уменьшает высоту, и для каждого значения высоты существует только один вызов. Поэтому мы можем выполнить итеративный поиск.
Пусть n1, n2
будут такими узлами, что n2
является корнем, а n1
является нулем.
Пусть v
будет тем узлом, который вы ищете
Пока n2 не v
:
n1
: = n2
- если
v.value
> n2.value
, n2
: = n2.right
- остальное
n2
: = n.left
возврат n1
Я сохранил постоянное количество (2) указателей, поэтому сложность составляет O(1)
.