二叉树中求结点的祖先
时间: 2023-11-14 08:10:45 浏览: 289
在二叉树中,一个结点的祖先是指从根节点开始到该结点路径上的所有节点。可以通过递归的方式来求一个结点的祖先。
具体地,从根节点开始遍历二叉树,当遇到目标结点时,返回 true,同时将该结点的值加入到一个栈中。然后在该结点的左子树或右子树中继续递归查找目标结点。如果在子树中找到目标结点,则返回 true,否则弹出栈顶元素(即该结点)并返回 false。
以下是一个示例代码实现:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def find_ancestors(root: TreeNode, target: TreeNode) -> bool:
if not root:
return False
if root == target:
return True
if find_ancestors(root.left, target) or find_ancestors(root.right, target):
print(root.val, end=' ')
return True
return False
```
其中,`root` 表示当前遍历到的结点,`target` 表示要查找祖先的目标结点。如果找到目标结点,则在打印出该结点的值,并返回 True。如果在左子树或右子树中找到目标结点,则返回 True。如果左右子树均不存在目标结点,说明该结点不是目标结点的祖先,则返回 False。
阅读全文