十五周算法训练营——BFS

news2024/9/26 5:17:45

今天是十五周算法训练营的第六周,主要讲BFS专题。(欢迎加入十五周算法训练营,与小伙伴一起卷算法)

「BFS的核心思想是把一些问题抽象成图,从一个点开始,向四周开始扩散。一般来说,写BFS算法都是用队列这种数据结构,每次将一个节点周围的所有节点加入队列。」

「BFS相对于DFS的最主要的区别是:BFS找到的路径一定是最短的,但代价就是空间复杂度比DFS大很多。」

「BFS出现的常见场景:问题的本质就是让你在一幅图中找到从起点start到终点target的最近距离」

二叉树的最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

示例 1:

074b6652c0faf71f20b8f6ff16af067d.jpeg
img

输入:root = [3,9,20,null,null,15,7] 输出:2

// 找最短路径,用BFS
// 1. 首先明确起点start和终点target是什么?
// 起点就是root根节点,终点就是最靠近根节点的那个叶子节点
// 2、 怎么判断达到了终点
// 叶子节点就是两个子节点都是null的节点

function minDepth(root) {
    const bfs = (root) => {
        if (!root) {
            return 0;
        }

        // root本身就是一层,depth初始化为1
        let depth = 1;
        const queue = [root];

        while (queue.length > 0) {
            const size = queue.length;

            // 遍历当前存在队列中的数据
            for (let i = 0; i < size; i++) {
                const cur = queue.shift();

                // 将左右子节点存入队列
                if (cur.left) {
                    queue.push(cur.left);
                }
                if (cur.right) {
                    queue.push(cur.right);
                }

                if (cur.left === null && cur.right === null) {
                    return depth;
                }
            }

            // 遍历完一层之后增加步数
            depth++;
        }

        return depth;
    }

    return bfs(root);
}

填充每个节点的下一个右侧节点指针

给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:

struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。

初始状态下,所有 next 指针都被设置为 NULL。

示例 1:

522e9673a584c11553e3bb1c0908bcbe.png
img

输入:root = [1,2,3,4,5,6,7] 输出:[1,#,2,3,#,4,5,6,7,#] 解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,'#' 标志着每一层的结束

// 典型的通过BFS解决
function connect(root) {
    if (root === null) {
        return root;
    }
    const list = [root];

    while (list.length > 0) {
        const size = list.length;

        for (let i = 0; i < size; i++) {
            const preNode = list.shift();
            // 进行连接
            if (i === size - 1) {
                preNode.next = null;
            } else {
                preNode.next = list[0];
            }
            // 获取下一个元素,将内容填充到栈中
            preNode.left && list.push(preNode.left);
            preNode.right && list.push(preNode.right);
        }
    }

    return root;
}

const root = {
    val: 1,
    left: {
        val: 2,
        left: null,
        right: null
    },
    right: {
        val: 3,
        left: null,
        right: null
    }
};

console.log(connect(root));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/504721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3-Raven2百个靶机渗透(精写-思路为主)

特别注明&#xff1a;本文章只用于学习交流&#xff0c;不可用来从事违法犯罪活动&#xff0c;如使用者用来从事违法犯罪行为&#xff0c;一切与作者无关。 文章目录 前言一、信息收集二、ssh爆破尝试三、根据框架exp和cve拿shell四、对mysql的进一步渗透&#xff0c;mysql UD…

Python - 通过 pyInstaller 打包成可执行文件

一、场景 通常来说&#xff0c;我们开发的 python 脚本一般都会用到一些第三方的包&#xff0c;并且需要对应版本的 python 解释器。因此在 python 脚本在不同的主机上运行的时候相对来说不是很方便&#xff0c;为此可以通过 pyInstaller 将脚本和解释器打包成可执行文件&…

数字中国创新大赛·信创赛道优秀作品推荐 | 国产工业实时操作系统(Intewell)

产品介绍和功能体系 Intewell工业实时操作系统源于有30多年发展历史的“道”操作系统&#xff0c;是一款微内核实时操作系统&#xff08;RTOS&#xff09;&#xff0c;具有良好的可扩展性、友好的用户开发环境和丰富的开发调试工具&#xff0c;提供POSIX接口。Intewell工业实时…

2023年5月产品经理认证NPDP线上班,我要报名学习

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

程序设计的三种结构-C中实现其的6条语句

什么是程序设计结构? C语言设计出来就是为了解决现实中存在的问题&#xff0c;但是现实中问题大多较为复杂&#xff0c;如何描述问题也成为了一个重要的问题。将这些众多的问题核心找出来&#xff0c;我们发现只需要使用三种基本的结构包括&#xff1a;顺序结构&#xff0c;分…

FS4068四节锂电池充电管理控制芯片

FS4068 是一款工作于 2.7V 到 6.5V 的 PFM 升压型四节锂电池充电控制集成电路。 FS4068采用恒流和恒压模式对电池进行充电管理&#xff0c;内部集成有基准电压源&#xff0c; 电感电流检测单元&#xff0c;电池电压检测电路和外置场效应晶体管驱动电路等&#xff0c; 具有外部元…

面向开发者的 ChatGPT 提示工程

LLM 正在逐步改变人们的生活&#xff0c;而对于开发者&#xff0c;如何基于 LLM 提供的 API 接口快速、便捷地开发一些具备更强能力、集成 LLM 的应用&#xff0c;来便捷地实现一些更新颖、更实用的能力&#xff0c;是一个急需学习的重要能力。由巨佬吴恩达老师与 OpenAI 合作推…

Golang每日一练(leetDay0060) 多数元素、两数之和III

目录 169. 多数元素 Majority Element &#x1f31f; 170. 两数之和 III Two-sum-iii-data-structure-design &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏…

Zynq实现SDI视频解码PCIE传输 提供工程源码和QT上位机源码加技术支持

目录 1、前言2、我已有的SDI编解码方案3、我已有的PCIE方案4、基于zynq架构的PCIE5、总体设计思路和方案SDI摄像头Gv8601a单端转差GTX解串SDI解码VGA时序恢复YUV转RGB图像缓存PCIE发送通路SDI同步输出通路 6、vivado工程详解7、驱动安装8、QT上位机软件9、上板调试验证SDI同步H…

VMware虚拟机克隆、复制虚拟机

文章目录 为什么要克隆一、环境检查二、开始克隆三、网卡静态配置 为什么要克隆 首先VMware 上创建的虚拟机是可以重复使用的&#xff0c;安装好的虚拟机可以直接复制或者剪切到其它任意电脑上&#xff0c;然后使用 VMware 打开使用&#xff0c;两者的虚拟机设置以及登录密码都…

MySQL笔记(二) 数据库操纵语言DML 、数据库查询语言DQL、数据库控制语言DCL、计算字段、子查询、函数

MySQL笔记&#xff08;二&#xff09; 数据库操纵语言 DML插入数据 INSERT修改数据 UPDATE删除数据 DELETE 数据库查询语言DQL单表查询常用查询条件排序查询分组和分页查询限制结果 分页查询多表查询自身连接查询外连接查询嵌套查询 计算字段字段 field拼接 concatenateTrim()…

10个免费的ChatGPT镜像网站

文章目录 前言说明网站 前言 ChatGPT是一种基于OpenAI GPT&#xff08;Generative Pretrained Transformer&#xff09;模型的聊天机器人&#xff0c;它可以对用户提出的问题做出回答&#xff0c;同时还能够进行精准的语言理解和回复&#xff0c;较好地满足了人们与机器人之间…

MySQL数据库基础表格——增删改查(下)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️树高千尺&#xff0c;落叶归根人生不易&…

媒体邀约服务

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约是什么&#xff1f;专业的媒体邀约服务包含哪些内容&#xff1f;怎么选择合适的媒体邀约服务机构&#xff1f; 今天胡老师就跟大家分享下这方面你的经验。 一&#xff0c;媒体邀…

【C++STL】AVL树

前言 二叉搜索树是具有特殊存储结构的树&#xff0c;任意根节点的左子树的所有节点值都比根节点的值小&#xff0c;右子树的所有节点值都比根节点大。 这种特殊的存储结构使得查找的效率大大提升&#xff0c;为logN。但是还有缺陷。 因为二叉搜索树的构建是一个节点一个节点的…

django 过往后端搭建笔记整理 (2)--rest_framework视图使用

rest_framework视图使用 CreateAPIView---单独执行post上传逻辑views.pyuser_serializers.py CreateAPIView—单独执行post上传逻辑 基本逻辑&#xff1a; ① 准备视图函数类 ② 准备序列化器类 &#xff08;其中可以自定义如何序列化数据、序列化哪些数据&#xff0c;以及如何…

苹果最近删除的照片删除怎么恢复?专业人士都这样恢复照片!

案例&#xff1a;苹果照片删除了怎么恢复&#xff1f; 【友友们&#xff0c;最近不小心清空了手机照片&#xff0c;在最近删除没有看到&#xff0c;有什么方法可以找回来吗&#xff1f;】 随着现代科技的不断发展&#xff0c;手机已经成为人们生活中必不可少的物品&#xff0c…

设计模式 -- 享元模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

以CSDN为例,用Charles抓浏览器接口

0 描述 很多网站&#xff0c;都禁止F12&#xff0c;这就给抓包设置了门槛&#xff0c;虽然解决的方法有很多&#xff0c;今天尝试使用工具试一试&#xff0c;以CSDN热榜为例&#xff0c;直接转python代码 1 工具下载 工欲善其事&#xff0c;必先利其器 这个我就不多说&#x…

MySql -- 为什么使用B+树做索引

再有人问你为什么MySQL用B树做索引&#xff0c;就把这篇文章发给她 本文是参考上述文章进行总结和补充,大家感兴趣也可以阅读原文. 目录 1. 索引 2. 二叉搜索树 3. 平衡二叉树 4. B树 5. B树 6.扩展 -- 聚集索引 VS 非聚集索引 1. 索引 概念:索引是一种特殊的文件&#xff…