试图在二叉树中查找节点

时间:2017-07-13 12:05:11

标签: python binary-tree

我试图在二叉树分支中找到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语句在第一次传递时执行并立即返回。

如何改善这一点。我不想使用额外的变量来存储结果并返回它。

1 个答案:

答案 0 :(得分:1)

nodeAnodeB个节点仍然可以有子节点,可能是nodeAnodeB个节点。

使用return 1,您在遇到nodeAnodeB节点时就停止了递归搜索。

一种解决方案是:

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)