试图理解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 是否包含在子树中。