Python 检查treeNode是否是另一个节点的祖先

Python 检查treeNode是否是另一个节点的祖先,python,tree,Python,Tree,我使用这个函数递归地检查是否是节点是中间的祖先 假设我们有一棵看起来像 def is_ancestor(node, middle): # search down if node.data == middle.data: return True if node.left: is_ancestor(node.left, middle) if node.right: is_ancestor(node.right, midd

我使用这个函数递归地检查是否是
节点
中间
的祖先

假设我们有一棵看起来像

def is_ancestor(node, middle):
    # search down
    if node.data == middle.data:
        return True
    if node.left:
        is_ancestor(node.left, middle)
    if node.right:
        is_ancestor(node.right, middle)
    return False
我说节点是指向
5
的节点,中间是
2

当调用
is\u祖先(node\u with_5,node\u with_2)
时,我希望递归地将
节点
向左和向右向下移动,并在找到中间的
时返回True

然而,我的当前函数给了我
False
,即使它会在第一次递归调用中找到
中间的


有什么帮助吗?

您需要做一些小改动,如:

    5
   /
  2
   \
    4
您可以用更简洁的方式获得整个逻辑:

def is_ancestor(node, middle):
    if node is middle:  # data could coincide, compare nodes directly 
        return True
    if node.left and is_ancestor(node.left, middle):
        return True  # do actually return something
    if node.right and is_ancestor(node.right, middle):
        return True  # do actually return something
    return False

这个方法绝对好。
def is_ancestor(node, middle):
    if node is None:
        return False
    if node is middle:
        return True
    return is_ancestor(node.left, middle) or is_ancestor(node.right, middle)