Основной алгоритм поиска дерева для поиска узла (со значением k) в двоичном дереве поиска. 'x' обозначает узел двоичного дерева поиска.Итеративная версия поиска двоичного дерева
TREE-SEARCH (x, k)
if x= NIL or k = key[x]
then return x
if k < key[x]
then return TREE-SEARCH(left[x], k)
else return TREE-SEARCH(right[x], k)
Итерационный Версия:
ITERATIVE-TREE-SEARCH(x, k)
while x ≠ NIL and k ≠ key[x]
do if k < key[x]
then x ← left[x]
else x ← right[x]
return x
Если не первая линия (итерационного алгоритма) на самом деле быть в то время как (х ≠ NIL или к ≠ ключ [х]) вместо (при х ≠ NIL и k ≠ [x])?
Кстати, если вам интересно, это из одной из известных книг анализа алгоритмов.
Разве это не часть ИЛИ, что на самом деле требуется? Я имею в виду, если вы придете к той части, где x = NIL, просто выйдите и верните x, или если вы нашли ключ, снова вернитесь и распечатайте x. Вместо того, чтобы ждать, пока оба они произойдут сразу. Правильно ли я понимаю? – halluc1nati0n
EDIT: О, я получаю это сейчас, цикл while всегда имеет параметр с какой-то сложной логикой: D Если мы идем к x = NIL и имеем ключевое слово OR, ключ k ≠ [x] все равно будет выполняться, и, таким образом, цикл while все равно попытается выполнить (чего мы не намерены). Это смешно, я вроде бы думаю, что мне было неловко даже задавать этот вопрос сейчас! – halluc1nati0n