首页 > 其他分享 >广度优先搜索(BFS)应用——层序遍历和最段路径

广度优先搜索(BFS)应用——层序遍历和最段路径

时间:2022-12-03 17:56:32浏览次数:34  
标签:queue 遍历 层序 BFS right 最段 节点 模板

 BFS模板:

BFS使用队列,把每个还没有搜索到的点依次放入队列,然后再弹出队列的头部元素当做当前遍历点。BFS总共有两个模板:

模板1:如果不需要确定当前遍历到了哪一层,BFS模板如下。

 1 while queue 不空:
 2     cur = queue.pop()  // 弹出队列的头部元素当做当前遍历点
 3     for 节点 in cur的所有相邻节点:
 4         if 该节点有效且未访问过:
 5             queue.push(该节点)

模板2:如果要确定当前遍历到了哪一层,BFS模板如下。
这里增加了level表示当前遍历到二叉树中的哪一层了,也可以理解为在一个图中,现在已经走了多少步了。size表示在当前遍历层有多少个元素,也就是队列中的元素数,我们把这些元素一次性遍历完,即把当前层的所有元素都向外走了一步。

level = 0
while queue 不空:
{
    size = queue.size()
    while (size --) 
    {
        cur = queue.pop()
        for 节点 in cur的所有相邻节点:
            if 该节点有效且未被访问过:
                queue.push(该节点)
    }
    level ++;
}

上面两个是通用模板,在任何题目中都可以用,是要记住的!

 

 应用一:层序遍历

LeetCode 102. Binary Tree Level Order Traversal 二叉树的层序遍历(Medium)

本题要求二叉树的层次遍历,所以同一层的节点应该放在一起,故使用模板二。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        if not root:
            return []
        res = []
        q = [root]
        while q:
            temp = []
            for i in range(len(q)):  # 每一次循环输出一层
                r = q.pop(0)
                temp.append(r.val)
                if r.left:
                    q.append(r.left)
                if r.right:
                    q.append(r.right)
            res.append(temp)  # 记录temp(一层的数据)
        return res

  

 应用二:最短路径

 

 

 

参考文章:https://www.cnblogs.com/sbb-first-blog/p/13259728.html

标签:queue,遍历,层序,BFS,right,最段,节点,模板
From: https://www.cnblogs.com/spacerunnerZ/p/16948326.html

相关文章

  • 代码随想录算法训练营Day15|102. 二叉树的层序遍历、226. 翻转二叉树、101. 对称二叉
    代码随想录算法训练营Day15|102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树102.二叉树的层序遍历102.二叉树的层序遍历需要借用一个辅助数据结构即队列来......
  • ACM预备队-week5(DFS/BFS/二分图)
    [蓝桥杯2013国C]危险系数题目链接:P8604[蓝桥杯2013国C]危险系数-洛谷|计算机科学教育新生态(luogu.com.cn)割点:删除这个顶点集合以所有顶点相关联的边以......
  • 102. 二叉树的层序遍历
    102.二叉树的层序遍历给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。示例1:输入:root=[3,9,20,null,null,15,7]输出:[[3],......
  • 「WOJ 4701」Walk 虚点建图+01bfs
    前言模拟赛中,yzh遇到了这道题,但由于yzh没有学过01bfs。。。所以就一直在优化这道题,导致浪费了很长时间(但nfls的数据太水,dij和spfa都能过)Description给你一个\(n\)个......
  • 559. N 叉树的最大深度(bfs)
    给定一个N叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。 示......
  • BFS和DFS
    BFS和DFS的对比​​BFS​​——queue实现——层序遍历空间是指数级别的大!!!不会有爆栈的风险找最短路径defBFS(graph,s):queue=[]queue.append(s)visited=......
  • 搜索与图论篇——DFS和BFS
    搜索与图论篇——DFS和BFS本次我们介绍搜索与图论篇中DFS和BFS,我们会从下面几个角度来介绍:DFS和BFS简介DFS数字排序DFS皇后排序DFS树的重心BFS走迷宫BFS八数码BFS......
  • 必须经过关键点或达成某些状态的单源最短路-01bfs
    https://ac.nowcoder.com/acm/contest/45670/D题目描述:小竹成功从家里逃了出来,他决定去小胖家避一避。但是小胖要求小竹带一个刺激度大于xx的游戏才能去他家。为了防......
  • POJ 1573 Robot Motion(BFS)
    RobotMotionDescriptionArobothasbeenprogrammedtofollowtheinstructionsinitspath.Instructionsforthenextdirectiontherobotistomovearelaidd......
  • 简单搜索题 奇怪的电梯(DFS+BFS思路)
    题目:P1135奇怪的电梯-洛谷|计算机科学教育新生态类型:搜索dfs做法1用例会TLE注意要点1.往上走往下走去深搜(判断是否能走)2.是否已经访问这个节点(如果访问,则......