python - 试图在二叉树中查找节点

标签 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 语句在第一次传递时执行并立即返回。

我该如何改进。我不想使用额外的变量来存储结果并返回它。

最佳答案

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)

关于python - 试图在二叉树中查找节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45080113/

相关文章:

c++ - 在常数时间内从二叉树中获取数据

c - 打印二叉树时无限循环

python - NLTK 索引不工作

python - 将元素从for循环Python 3放入新数组中

python - 具有大数据集的嵌套 for 循环

java - 如何创建二叉树 [3,9,20,null,null,15,7] 以便将其传递给 levelOrder 方法?

c++ - 判断两棵树是否同构

python - 如何查找附加到一个或另一个类的元素? Selenium python

python - 组合不同的列

c++ - 从它的子节点余额计算 AVL 树节点余额