📅  最后修改于: 2023-12-03 14:54:30.287000             🧑  作者: Mango
在二叉树中,给定一个目标节点和一个距离 k,我们需要找到距离目标节点为 k 的所有节点,并将它们打印出来。本文将介绍一种使用迭代方法来解决这个问题的算法。
我们可以使用广度优先搜索(BFS)的方式来遍历二叉树并计算目标节点距离每个节点的距离。首先,我们需要创建一个队列(queue),用于存储待处理的节点。同时,我们可以使用一个哈希表(visited)来保存已经访问过的节点,避免重复计算。
下面是一个使用迭代方法实现打印距离根节点 k 距离的节点的示例代码:
def print_nodes_distance_from_root_k(node, k):
queue = [(node, 0)]
visited = {node}
res = []
while queue:
current, distance = queue.pop(0)
if distance == k:
res.append(current.val)
if current.left and current.left not in visited:
queue.append((current.left, distance + 1))
visited.add(current.left)
if current.right and current.right not in visited:
queue.append((current.right, distance + 1))
visited.add(current.right)
return res
假设我们有以下二叉树:
1
/ \
2 3
/ \ \
4 5 6
如果目标节点是节点 2,距离 k 是 2,那么应该打印出节点值为 4 和 6 的节点。我们可以使用上述代码来计算:
# 创建二叉树
class Node:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.right = Node(6)
# 打印距离根节点距离为 2 的节点
result = print_nodes_distance_from_root_k(root, 2)
print(result) # 输出: [4, 6]
这种迭代的解法在处理距离计算问题时非常高效,尤其适用于二叉树的广度优先遍历实现。希望本文可以对你理解迭代方法解决二叉树问题有所帮助。