📌  相关文章
📜  使用 BFS 的二叉树每个节点到根节点的距离(1)

📅  最后修改于: 2023-12-03 15:36:26.733000             🧑  作者: Mango

使用 BFS 的二叉树每个节点到根节点的距离

本文将介绍如何使用 BFS(广度优先搜索)算法来计算二叉树每个节点到根节点的距离。

什么是 BFS

BFS 是一种图遍历算法,它从起始节点开始,逐层遍历,直到找到目标节点为止。在二叉树中,BFS 从根节点开始,先遍历根节点的左右子节点,之后逐层遍历树的下一层节点。BFS 可以用来搜索最短路径,也可以用来遍历图或树。

如何计算每个节点到根节点的距离

以下是使用 BFS 计算二叉树每个节点到根节点的距离的步骤:

  1. 创建一个队列和字典(或哈希表),用于存储节点和节点到根节点的距离。
  2. 将根节点入队,并将其到根节点的距离设为 0。
  3. 当队列不为空时,执行以下操作:
    • 弹出队列中的第一个节点,并将节点的距离保存到字典中。
    • 如果节点有左子节点,则将其左子节点入队,距离为当前节点距离加一。
    • 如果节点有右子节点,则将其右子节点入队,距离为当前节点距离加一。
  4. 返回字典,其中保存了每个节点到根节点的距离。

以下是使用 Python 实现上述算法的代码:

from collections import deque

def node_distances(root):
    distances = {}
    queue = deque([(root, 0)])  # 将根节点入队,距离为 0
    while queue:
        node, dist = queue.popleft()  # 弹出队列中的第一个节点和距离
        distances[node] = dist  # 将节点的距离保存到字典中
        if node.left:
            queue.append((node.left, dist + 1))  # 将左子节点入队,距离为当前节点距离加一
        if node.right:
            queue.append((node.right, dist + 1))  # 将右子节点入队,距离为当前节点距离加一
    return distances  # 返回每个节点到根节点的距离字典
总结

BFS 算法可以很方便地计算二叉树每个节点到根节点的距离。使用 BFS 算法的关键是创建一个队列来存储待遍历的节点,以及使用字典来保存节点到根节点的距离。