-1
При поиске «3» в дереве, в котором явно содержится 3, код переходит в правильный оператор «if», но не возвращает True. Почему это?Поиск по глубине в Python никогда не возвращается True
class Node:
def __init__(self):
self.value = None
self.leftChild = None
self.rightChild = None
def dfs(root, sought):
print "root", root.value
print "sought", sought.value
if root.value == sought.value:
print "inside root = sought"
return True
elif root.leftChild is not None and root.rightChild is not None:
dfs(root.leftChild, sought)
dfs(root.rightChild, sought)
return False
Дерево, которое я создал с искомым значением заключается в следующем:
n1 = Node()
n2 = Node()
n3 = Node()
n4 = Node()
n5 = Node()
n1.leftChild = n2
n1.rightChild = n5
n2.leftChild = n3
n2.rightChild = n4
n1.value=1
n2.value=2
n3.value=3
n4.value=4
n5.value=5
s = Node()
s.value=3
Но выход оглупления. У меня есть подозрение, что отсутствие return True
имеет какое-то отношение к рекурсивной природе Python?
> dfs(n1,s)
> root 1
> sought 3
> root 2
> sought 3
> root 3
> sought 3
> inside root = sought
> root 4
> sought 3
> root 5
> sought 3
> False
Это сделал это! Благодарю. Это верно для всех других языков, таких как Java, или только подмножества, включая Python? – Aspen
@Aspen это верно для каждого языка. Если нет, если «корневой» узел дерева не равен 'seek', он никогда не вернет« True »(ваше второе условие, * always * возвращает« False »). –
Это будет вычислять обе стороны независимо от того, если это необходимо. Возможно, 'return dfs (..) или dfs (...)' будет лучшим совпадением. – Sylwester