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)