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

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

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

在二叉树中,每个节点到根节点的距离可以使用广度优先搜索(BFS)算法来求解。BFS算法可以遍历整个二叉树,并且可以记录每个节点到根节点的距离。

BFS算法

BFS算法是一种广度优先的搜索算法,可以遍历整个二叉树。BFS算法从根节点开始,首先将根节点入队列,然后从队列中取出一个节点,并将其所有未标记的子节点入队列。重复此过程,直到队列为空。

BFS算法可以记录每个节点到根节点的距离。我们可以定义一个数组dist,dist[i]表示节点i到根节点的距离。BFS算法会先将根节点入队列,并将dist[root]设为0。然后从队列中取出一个节点i,并遍历其所有未标记的子节点j。如果节点j未被标记,将节点j入队列,并将dist[j]设为dist[i]+1。

代码实现

下面是使用Python实现BFS算法求解每个节点到根节点的距离的代码。

from collections import deque

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def bfs(root):
    dist = [-1 for i in range(1005)]
    q = deque()
    q.append(root)
    dist[root.val] = 0
    while len(q) > 0:
        u = q.popleft()
        if u.left is not None and dist[u.left.val] == -1:
            q.append(u.left)
            dist[u.left.val] = dist[u.val]+1
        if u.right is not None and dist[u.right.val] == -1:
            q.append(u.right)
            dist[u.right.val] = dist[u.val]+1
    return dist

注:上述代码中TreeNode是一个定义二叉树节点的类。bfs函数用于求解二叉树每个节点到根节点的距离。

总结

使用BFS算法可以求解二叉树每个节点到根节点的距离。BFS算法需要将每个节点到根节点的距离记录下来,可以使用一个距离数组dist。遍历每个节点时,如果其子节点未被标记,将其入队列,并更新距离数组。