找到节点时,递归二叉树搜索未返回 True



myTree是python中的一个列表列表,表示一个二进制树。对于列表中的每个列表,元素0表示指向左子级的指针,元素1表示节点的值,元素2表示指向右子级的指示器。

myTree = [[1,50,2],[3,27,4],[9,62,10],[5,12,6],[7,35,8],[-1,9,-1],[-1,14,-1],[-1,28,-1],[-1,41,-1],[11,59,12],[13,71,-1],[-1,52,-1],[-1,60,-1],[-1,68,-1]]

def findNode(item,comparingNode):
#print (comparingNode)
comparingNode = myTree[comparingNode]
if item == comparingNode[1]:
print(comparingNode[1])
return True #This is where it is supposed to return True
elif item > comparingNode[1]:
if comparingNode[2] != -1:
print(comparingNode[0],comparingNode[1],comparingNode[2],"comp1")
return findNode(item,comparingNode[2])
else:
return False
else:
if comparingNode[0] != -1: 
print(comparingNode[0],comparingNode[1],comparingNode[2],"comp2")
findNode(item,comparingNode[0])
else:
return False

#print(comparingNode[1])


if findNode(9,0) == True:
print("found")

运行时,它不会产生错误消息,并且程序完成。搜索已经清楚地找到了节点9,因为当运行时,它会在最后打印出9。然而,即使调试器说它访问了源代码行(第9行),该函数也不会返回True。

您在else路径中忘记了返回。这项工作:

def findNode(item,comparingNode):
#print (comparingNode)
comparingNode = myTree[comparingNode]
if item == comparingNode[1]:
print(comparingNode[1])
return True #This is where it is supposed to return True
elif item > comparingNode[1]:
if comparingNode[2] != -1:
print(comparingNode[0],comparingNode[1],comparingNode[2],"comp1")
return findNode(item,comparingNode[2])
else:
return False
else:
if comparingNode[0] != -1: 
print(comparingNode[0],comparingNode[1],comparingNode[2],"comp2")
return findNode(item,comparingNode[0])
else:
return False

正如Willem在上面的评论中所建议的那样,行:

findNode(item,comparingNode[0])

应修改为:

return findNode(item,comparingNode[0])

输出将是:

1 50 2 comp2
3 27 4 comp2
5 12 6 comp2
9
found

您刚刚忘记了return:

if comparingNode[0] != -1: 
print(comparingNode[0],comparingNode[1],comparingNode[2],"comp2")
**** findNode(item,comparingNode[0])
else:
return False

另一个注意事项:您可以在不进行== True:的情况下进行测试

if findNode(9,0):
print("found")

最新更新