Следующий псевдокод будет делать то, что вы хотите для дерева в порядке возрастания.
def findval (node,lookfor):
if node is null:
return null
if node.val is equal to lookfor:
return node
if node.val is less than lookfor
return findval (node.right,lookfor)
return findval (node.left,lookfor)
называться с:
znode = findval (root, "z")
Это даст вам узел или нуль, если ни один узел не существует.
Если вы хотите, чтобы избежать рекурсий, вы можете использовать итеративное решение:
def findval (node,lookfor):
while node is not null:
if node.val is equal to lookfor:
break
if node.val is less than lookfor:
node = node.right
else:
node = node.left
return node
Очевидно, есть все виды улучшений вы могли бы сделать такие как разрешение другого порядка, или функцию сравнения обратного вызова , или позволяет дублировать ключи, но это канонический пример поиска двоичного дерева.
Это домашнее задание? – winwaed
нет, меня просто попросили на собеседовании, я хочу посмотреть, как я это сделал :) – fmunshi