我试图在二叉树分支中找到nodeA和nodeB。我返回的总和应该等于找到的节点数。这是我的实现
def checkSubtree(self, nodeA, nodeB, node):
if node is None:
return 0
if node is nodeA or node is nodeB:
return 1
return self.checkSubtree(nodeA, nodeB, node.leftChild) + self.checkSubtree(nodeA, nodeB, node.rightChild)
当我得到2时,我一直得到1.我发现它是因为第二个if语句在第一次传递时执行并立即返回。
如何改善这一点。我不想使用额外的变量来存储结果并返回它。
答案 0 :(得分:1)
nodeA
或nodeB
个节点仍然可以有子节点,可能是nodeA
或nodeB
个节点。
使用return 1
,您在遇到nodeA
或nodeB
节点时就停止了递归搜索。
一种解决方案是:
def checkSubtree(self, nodeA, nodeB, node):
if node is None:
return 0
else:
children_sum = self.checkSubtree(nodeA, nodeB, node.leftChild) + self.checkSubtree(nodeA, nodeB, node.rightChild)
if node is nodeA or node is nodeB:
return 1 + children_sum # <-- Important. Not just 1 !
else:
return children_sum
如果由于某种原因你现在想要定义一个局部变量:
def checkSubtree(self, nodeA, nodeB, node):
if node is None:
return 0
else:
return self.checkSubtree(nodeA, nodeB, node.leftChild) + self.checkSubtree(
nodeA, nodeB, node.rightChild) + int(node is nodeA or node is nodeB)