iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >LeetCode中广度优先搜索算法的示例分析
  • 559
分享到

LeetCode中广度优先搜索算法的示例分析

2023-06-19 10:06:58 559人浏览 独家记忆
摘要

小编给大家分享一下LeetCode中广度优先搜索算法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、认识广度优先搜索算法广度优先搜索(BFS)算法是图

小编给大家分享一下LeetCode中广度优先搜索算法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、认识广度优先搜索算法

广度优先搜索(BFS)算法是图的一种遍历方法,它的核心思想是从图的某一个节点开始,依次遍历相邻节点,再从这些相邻节点继续向外层节点遍历,直到连通图的所有节点均被访问到。

LeetCode中广度优先搜索算法的示例分析

如上图所示,A、B、C、D、E、F六个节点构成了连通图。我们使用广度优先搜索算法对该连通图进行遍历,从A点出发,找到A点的相邻节点B点和F点,再分别找到B点和F点的相邻节点C点和E点,最终找到C点和E点的共同相邻节点D点。因此我们得到的遍历结果为ABFCED。

 

二、Leetcode常见广度优先搜索形式

当我们打开Leetcode的广度优先搜索标签,查看相关算法题时会发现,很多题是将连通图简化为树或二叉树的形式展示。因此我们可以从树/二叉树的角度分析广度优先搜索算法,只要搞懂了树的广度优先搜索,图的广度优先搜索只是相邻节点的选择差异罢了。
广度优先搜索算法在树/二叉树中被简化为层次遍历算法,即从树的根节点出发,依次遍历根节点的孩子,再分别将这些孩子作为根节点,循环上述操作,直至将所有的节点全部遍历结束。
如下图所示,树的层次遍历就是一种特殊的广度优先搜索。根据上文的遍历规则不难得出树的广度优先搜索序列为ABCDEFG。

LeetCode中广度优先搜索算法的示例分析

 

三、一道算法题讲解具体的BFS实现思路

我选取了Leetcode上一道典型的广度优先搜索算法给大家整理一下BFS的算法基本实现思路,题目如下:

LeetCode中广度优先搜索算法的示例分析

思路: 从题意中我们不难看出,该题的核心问题就是求出二叉树的每一层中最右边的节点的值并将其存入数组最后返回该数组。很显然,利用广度优先搜索算法可以很容易将每一层的最右节点求出。
对于广度优先搜索算法,我们需要申请一个辅助队列帮助我们存储每一层的每一个节点。首先需要对根节点判空,若根节点为空则直接返回一个空数组,否则将根节点存入队列中。接下来我们需要将队列中该层的所有节点取出,并找出它们的孩子节点存入队列中。需要注意的是,到了最右节点时应将该节点的值存入数组。循环该过程直至遍历二叉树的所有节点即可得出最终的结果。

class Solution {
    public List<Integer> rightSideView(Treenode root) {
        List<Integer> ans = new ArrayList<>();
        if (root == null) {
            return ans;
        }

        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()) {
            int count = queue.size();
            TreeNode currentNode = null;
            while (count > 0) {
                count--;
                currentNode = queue.poll();
                if (currentNode.left != null) {
                    queue.add(currentNode.left);
                }
                if (currentNode.right != null) {
                    queue.add(currentNode.right);
                }
            }
            ans.add(currentNode.val);
        }
        return ans;
    }
}
 

算法复杂度分析:算法需要访问该二叉树中的每个节点并且每个节点的访问时间为O(1),所以最终的事件复杂度为O(n)。对于空间复杂度,我们申请了一个辅助队列帮助存储二叉树节点,最终的空间复杂度也可表示为O(n)。

以上是“LeetCode中广度优先搜索算法的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: LeetCode中广度优先搜索算法的示例分析

本文链接: https://www.lsjlt.com/news/295268.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • LeetCode中广度优先搜索算法的示例分析
    小编给大家分享一下LeetCode中广度优先搜索算法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、认识广度优先搜索算法广度优先搜索(BFS)算法是图...
    99+
    2023-06-19
  • C++回溯算法广度优先搜索举例分析
    目录迷宫问题N叉树的层序遍历腐烂的橘子单词接龙打开转盘锁迷宫问题 假设有一个迷宫,里面有障碍物,迷宫用二维矩阵表示,标记为0的地方表示可以通过,标记为1的地方表示障碍物,不能通过。现...
    99+
    2024-04-02
  • C++回溯算法深度优先搜索的示例分析
    小编给大家分享一下C++回溯算法深度优先搜索的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!扑克牌全排列假如有编号为1~ 3的3张扑克牌和编号为1~3的3个盒子,现在需要将3张牌分别放到3个盒子中去,且每个盒子只能...
    99+
    2023-06-29
  • Java实现深度优先搜索(DFS)和广度优先搜索(BFS)算法
    目录一.深度优先遍历和广度优先遍历1.深度优先遍历2.广度优先遍历二.图像渲染1.题目描述2.问题分析3代码实现1.广度优先遍历2.深度优先遍历三.岛屿的最大面积1.题目描述2.问题...
    99+
    2023-05-18
    Java深度优先和广度优先 Java深度优先 Java广度优先
  • Python 算法基础篇:深度优先搜索( DFS )和广度优先搜索( BFS )
    Python 算法基础篇:深度优先搜索( DFS )和广度优先搜索( BFS ) 引言 1. 深度优先搜索( DFS )算法概述2. 深度优先搜索( DFS )算法实现实例1:图的 DFS 遍...
    99+
    2023-10-04
    深度优先 算法 python 广度优先
  • Java中深度优先与广度优先的示例分析
    这篇文章给大家分享的是有关Java中深度优先与广度优先的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发...
    99+
    2023-05-30
    java
  • JavaScript中深度优先遍历和广度优先遍历算法的示例分析
    这篇文章主要为大家展示了“JavaScript中深度优先遍历和广度优先遍历算法的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript中深度...
    99+
    2024-04-02
  • C++回溯算法深度优先搜索举例分析
    目录扑克牌全排列员工的重要性图像渲染被围绕的区域岛屿数量电话号码的字母组合组合总数活字印书N皇后扑克牌全排列 假如有编号为1~ 3的3张扑克牌和编号为1~3的3个盒子,现在需要将3张...
    99+
    2024-04-02
  • Python实现图的广度和深度优先路径搜索算法
    目录前言1. 图理论1.1 图的概念1.2 定义图1.3 图的抽象数据结构2. 图的存储实现2.1 邻接矩阵2.2 编码实现邻接矩阵3. 搜索路径3.1 广度优先搜索3.2 深度优先...
    99+
    2024-04-02
  • C语言中深度优先搜索(DFS)算法的示例详解
    目录迷宫问题思路实现代码深搜的剪枝优化可行性剪枝最优性剪枝迷宫问题 有一个迷宫: S**.....***T (其中字符S表示起点,字符T表示终点,字符*表示墙壁,字符.表示平地。你需...
    99+
    2023-02-16
    C语言深度优先搜索算法 C语言 DFS算法
  • Java如何实现基于图的深度优先搜索和广度优先搜索
    这篇文章将为大家详细讲解有关Java如何实现基于图的深度优先搜索和广度优先搜索,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.新建一个表示“无向图”类NoDirectionGraphpackage&nb...
    99+
    2023-05-30
    java
  • 调试广度优先搜索 (BFS) 的实现
    php小编柚子为您介绍调试广度优先搜索(BFS)的实现。广度优先搜索是一种用于图和树的遍历算法,它从起始节点开始,逐层地访问相邻节点,直到找到目标节点。在实现BFS算法时,调试是非常重...
    99+
    2024-02-10
  • Python怎么实现图的广度和深度优先路径搜索算法
    本篇内容主要讲解“Python怎么实现图的广度和深度优先路径搜索算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么实现图的广度和深度优先路径搜索算法”吧!前言图是一种抽象数据结构...
    99+
    2023-06-30
  • css优先级计算的示例分析
    这篇文章主要为大家展示了“css优先级计算的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css优先级计算的示例分析”这篇文章吧。主要的css选择器有i...
    99+
    2024-04-02
  • python中搜索的示例分析
    这篇文章将为大家详细讲解有关python中搜索的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 普通搜索搜索是指从元素集合中找到某个特定元素的算法过程。搜索过程通常返回 True 或 Fals...
    99+
    2023-06-22
  • JavaScript树结构深度优先算法实例分析
    这篇文章主要介绍了JavaScript树结构深度优先算法实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript树结构深度优先算法实例分析文章都会有所收获,下面我们一起来看看吧。什么是树在现实...
    99+
    2023-07-02
  • CSS中优先级的示例分析
    这期内容当中小编将会给大家带来有关CSS中优先级的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。计算优先级优先级是根据由每种选择器类型构成的级联字串计算而成的。他...
    99+
    2024-04-02
  • C++回溯算法之深度优先搜索详细介绍
    目录一、前言二、基本概念1.简单介绍2. 官方概念三、动图分析四、模板框架五、例题分析组合问题题干描述思路分析一、前言 本文介绍了经典搜索算法: 深度优先搜索(DFS) 两个小故事:...
    99+
    2023-01-13
    C++深度优先搜索 C++深度优先搜索算法
  • go语言编程学习实现图的广度与深度优先搜索
    目录图的实现BFSDFS图的实现 所谓图就是节点及其连接关系的集合。所以可以通过一个一维数组表示节点,外加一个二维数组表示节点之间的关系。 //图的矩阵实现 typedef st...
    99+
    2024-04-02
  • Java实现广度优先遍历的示例详解
    目录什么是广度优先一个简单的例子程序实现总结什么是广度优先 广度就是扩展开,广度优先的意思就是尽量扩展开。所以在算法实现的时候,就是一个循环遍历枚举每一个邻接点。其基本思路就是按层扩...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作