在二叉树中查找值为 x 的结点,编写算法打印值为 x 的节点的所有祖先
时间: 2024-12-13 12:19:31 浏览: 32
在二叉树中查找值为 x 的结点并打印其所有祖先的过程可以分为以下几个步骤:
1. 定义一个辅助函数 `findAncestors(node, target, ancestors)`,接受当前节点、目标值以及祖先集合作为参数。如果当前节点为空,或者当前节点的值等于目标值,直接将当前节点添加到祖先集合中返回。
```python
def findAncestors(node, target, ancestors=None):
if node is None or node.val == target:
return ancestors + [node] if ancestors else [node]
left_ancestors = findAncestors(node.left, target, ancestors)
right_ancestors = findAncestors(node.right, target, ancestors)
# 如果目标值在左子树或右子树中找到,返回该路径的祖先;否则,直接返回
if left_ancestors:
return left_ancestors
elif right_ancestors:
return right_ancestors
else:
return ancestors
```
2. 主函数开始遍历根节点,调用 `findAncestors(root, x)` 获取值为 x 的所有祖先,并打印它们。
```python
def print_ancestors(root, x):
ancestors = findAncestors(root, x)
for ancestor in ancestors:
print(ancestor.val) # 打印每个祖先节点的值
```
阅读全文