微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

试图理解python中二叉树递归函数中存在的节点

如何解决试图理解python中二叉树递归函数中存在的节点

我试图理解下面的递归函数,它表示二叉树中是否存在特定节点。我做了功课,得到了大部分的递归部分,但最后一个 return 语句(return root.value == value 或 inleft 或 inright)困扰着我。

有人可以帮我理解这个方法吗?

    def existsInTree(self,root,value):
        if root is None:
            return False
        else:
            inleft = self.existsInTree(root.left,value)
            inright = self.existsInTree(root.right,value)
            print(inleft,inright)
            return root.value == value or inleft or inright

 example binary tree:

            10
           /  \
        11     9

解决方法

我们首先将根的数据与要搜索的节点的数据进行比较。如果找到匹配项,则将标志设置为 true。否则,在左子树中搜索节点,然后在右子树中搜索。

,

还有另一种看待 return 语句的方式,您可以在 or 关键字处拆分 return 语句

def ifRootExists(self,root,value):
 
    if (root == None):
        return False
 
    if (root.value == value):
        return True
 
    """ then recur on left sutree """
    res1 = ifrootExists(root.left,value)
    # root found,no need to look further
    if res1:
        return True
 
    """ root is not found in left,so recur on right subtree """
    res2 = ifrootExists(root.right,value)
 
    return res2
,

我们可以通过上面的函数得到结果是否存在某个节点。

算法如下。

  1. root 为 None 或 Not。如果没有,则返回父函数调用的位置,值为“False”。
  2. 否则,函数会根据当前节点不断搜索。
  • inleft 是函数“existsInTree”的值,其中当前节点的左子节点是根节点。
  • inright 是函数“existsInTree”的值,其中当前节点的右孩子是根节点。
  1. 假设我们要搜索名为 V 的值。 树中存在哪个 V 表示当前值是 V 或在左树中,或在右树中。

总而言之,inleft 和 inright 表示 V 是否包含在子树中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。