leetcode每日一练-第102题-二叉树的层序遍历

news2024/12/30 3:04:56

 

一、思路

BFS

二、解题方法

通过广度优先搜索(BFS)的方式,按层遍历二叉树节点,并将每层的节点值保存在一个一维数组中,然后再将所有的一维数组存储在二维数组中,最后返回二维数组作为层序遍历的结果。

三、code

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector <vector <int>> ret;//定义一个二维数组 ret,用于存储层序遍历的结果。
        //如果输入的二叉树根节点为空,直接返回空的结果数组 ret。
        if (!root) {
            return ret;
        }

        queue <TreeNode*> q;//定义一个队列 q,用于辅助进行广度优先搜索(BFS)
        q.push(root);//将根节点入队,表示从根节点开始进行遍历。
        while (!q.empty()) {//当队列 q 不为空时,执行循环体内的操作。
            int currentLevelSize = q.size();//获取当前队列的大小,表示当前层的节点数。
            ret.push_back(vector <int> ());//在结果数组 ret 中添加一个空的一维数组,用于存储当前层的节点值。
            for (int i = 1; i <= currentLevelSize; ++i) {//循环处理当前层的节点。
                auto node = q.front(); q.pop();//获取当前队列的头节点,并将其出队。
                ret.back().push_back(node->val);//将当前节点的值加入到结果数组 ret 的最后一个一维数组中,即当前层的节点值数组。
                if (node->left) q.push(node->left);//如果当前节点有左子节点,将左子节点入队,继续遍历左子树。
                if (node->right) q.push(node->right);// 如果当前节点有右子节点,将右子节点入队,继续遍历右子树。
            }
        }
        
        return ret;
    }
};

=========================================================================学到的知识:

BFS(广度优先搜索)和DFS(深度优先搜索)是两种常见的图和树遍历算法,它们在搜索问题中有不同的应用和特点。

BFS(广度优先搜索):

  1. BFS是一种层序遍历算法,从起始节点开始,逐层遍历节点。
  2. 使用队列数据结构来实现,首先将起始节点入队,然后每次从队列中取出一个节点进行处理,并将其邻居节点入队。
  3. 由于BFS是逐层遍历,因此可以用于寻找最短路径和最小步数等问题。
  4. BFS通常适用于树或图中需要按层遍历节点的情况。

DFS(深度优先搜索):

  1. DFS是一种先序遍历算法,从起始节点开始,沿着一条路径尽可能深入,直到到达最深的节点,然后回溯,再选择其他路径。
  2. 使用栈数据结构(或递归)来实现,首先将起始节点入栈,然后每次从栈中取出一个节点进行处理,并将其邻居节点入栈。
  3. DFS不逐层遍历,可能会在树或图中深入到较远的节点,因此适用于一些搜索路径的问题,如寻找所有可能的路径或找到特定路径的问题。
  4. DFS也可能陷入无限循环,因此在使用时需要注意避免死循环。

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

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

相关文章

音视频--DTMF信号发送及检测

参考资料 https://zh.wikipedia.org/wiki/%E5%8F%8C%E9%9F%B3%E5%A4%9A%E9%A2%91https://www.cnblogs.com/lijingcheng/p/4454932.html 1. DTMF是什么 1.1 DTMF定义 双音多频信号&#xff08;英语&#xff1a;Dual-Tone Multi-Frequency&#xff0c;简称&#xff1a;DTMF&a…

当“国潮”遇见“双语” 以传承之心种下一颗文化的种子

看&#xff0c;活灵活现的纸片人在“跳舞”。光影的辉映下&#xff0c;两个形神兼备的“齐天大圣”究竟孰真孰假&#xff1f;舞台上&#xff0c;京西皮影非遗传承人王熙和5岁的Mona小朋友正在用双语为大家带来一段“真假美猴王”的好戏。生动的皮影造型和精彩的故事演绎看得台下…

【BEV感知】3-BEV开源数据集

3-BEV开源数据集 1 KITTI1.1 KITTI数据怎么采集?1.2 KITTI数据规模有多大?1.3 KITTI标注了哪些目标?1.4 转换矩阵1.5 标签文件 2 nuScenes2.1 nuScenes Vs KITTI2.2 标注文件 1 KITTI KITTI 1.1 KITTI数据怎么采集? 通过车载相机、激光雷达等传感器采集。 只提供了相机正…

bagging集成与boosting集成的区别是什么?

bagging集成与boosting集成的区别 区别一:数据方面 Bagging&#xff1a;对数据进行采样训练; Boosting&#xff1a;根据前一轮学习结果调整数据的重要性。 区别二:投票方面 Bagging&#xff1a;所有学习器平权投票; Boosting&#xff1a;对学习器进行加权投票。 区别三:…

接口相似数据结构复用率高?Apipost这招搞定!

在API设计和开发过程中&#xff0c;存在许多瓶颈&#xff0c;其中一个主要问题是在遇到相似数据结构的API时会产生重复性较多的工作&#xff1a;在每个API中都编写相同的数据&#xff0c;这不仅浪费时间和精力&#xff0c;还容易出错并降低API的可维护性。 为了解决这个问题&a…

排序八卦炉之冒泡、快排

文章目录 1.冒泡排序1.1代码实现1.2复杂度 2.快速排序2.1人物及思想介绍【源于百度】2.2hoare【霍尔】版本1.初识代码2.代码分析3.思其因果 3.相关博客 1.冒泡排序 1.1代码实现 //插入排序 O(N)~O(N^2) //冒泡排序 O(N)~O(N^2) //当数据有序 二者均为O(N) //当数据接近有序或…

linux大神Brendan Gregg 性能之巅 第二版(systems performance)阅读心得(第一章)

笔者从事某副省级市政务云系统运维7年&#xff0c;最近被下面这张图吸引开始阅读Brendan Gregg的《性能之巅 第二版》&#xff0c;下面将结合自己的运维经验一起来看看这本700多页的书。 1、绪论 1.1 系统性能 系统性能的影响因素涉及软件和硬件&#xff0c;CPU、内存、磁盘io…

9.物联网操作系统之软件定时器

一。软件定时器概念及应用 1.软件定时器定义 就是软件实现定时器。 2.FreeRTOS软件定时器介绍 如上图所示&#xff0c;Times的左边为设置定时器时间&#xff0c;设置方式可以为任务设置或者中断设置&#xff1b;Times的右边为定时器的定时相应&#xff0c;使用CalBack相应。 …

QMS质量管理系统是什么?

QMS质量管理系统是一种用于管理和优化企业质量管理的软件系统&#xff0c;在现代企业中&#xff0c;质量管理是非常重要的环节。 1. QMS系统的概念 QMS系统是一种用于管理和优化企业质量管理的软件系统。它可以帮助企业制定和实施质量管理策略、管理和控制质量过程、收集和分析…

RK356x Android11更换默认的Launcher

1、 开发环境 ubuntu版本&#xff1a;18.04 开发平台&#xff1a;RK356x Android版本&#xff1a;android11 2、目的 android11 系统自带了一个启动器Launcher3&#xff0c;在android源码路径下的packages/apps/Launcher3下&#xff0c;现需要将我们自己开发的Launcher放到a…

IOCP简单了解

1.IOCP是什么 IOCP是Input/Output Completion Ports的简称&#xff0c;中文翻译为完成端口&#xff0c;完成是应用程序向系统发起一个IO操作&#xff0c;系统会在操作结束后&#xff0c;将IO操作完成结果通知应用程序&#xff0c;端口指的是机制 2.重叠IO&#xff08;Overlappe…

Compose应用案例(利用docker compose安装lnmp实例)

目录 Compose应用案例 一、前提配置 &#xff08;一&#xff09;安装docker-ce&#xff08;Linux安装Docker&#xff09; &#xff08;二&#xff09;安装docker-compose 二、安装docker compose部署lnmp &#xff08;一&#xff09;目录结构&#xff1a; &#xff08;二…

SpringBoot、SpringCloud 版本查看

1、SpringBoot 官网地址 https://spring.io/projects/spring-boot#learn spring-boot-starter-parent 版本列表可查看&#xff1a; https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent 2、SpringCloud 官网地址 https://spring.io/pro…

pycharm安装

去官网下载安装包&#xff1a; 然后运行&#xff1a; &#xff08;左边第二个绿色字备注得有点子不对&#xff0c;这个勾选上的话&#xff0c;就是说在你的桌面上右击pycharm时会显示你的项目&#xff0c;你可以选择后直接打开。还是挺方便的一个功能&#xff0c;看自己需求要不…

Linux C++ 链接数据库并对数据库进行一些简单的操作

一.引言&#xff08;写在之前&#xff09; 在我们进行网络业务代码书写的时候&#xff0c;我们总是避免对产生的数据进行增删改查&#xff0c;为此&#xff0c;本小博主在这里简历分享一下自己在Linux中C语言与数据之间交互的代码的入门介绍。 二.代码书写以及一些变量和函数的…

Redis持久化两种方案以及对比差异

1.1.RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#xff0c;也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后&#xff0c;从磁盘读取快照文件&#xff0c;恢复数据。快照文件称为R…

vmware网络配置

效果&#xff1a; 虚拟机和物理机网络互通&#xff1b; 虚拟机可以上外网 环境&#xff1a; vmware version 17.0.0 Centos 7.9 配置 1&#xff0c;vmware 菜单 - 编辑 - Virtual Network Edit 2&#xff0c; 选择VMnet8 VMnet information:NAT&#xff1b; 勾选2个…

第一百二十一天学习记录:线性代数:矩阵乘法运算(宋浩板书)

在编程和学习数据结构的过程中&#xff0c;发现有些算法会用到矩阵和矩阵的乘法运算&#xff0c;因此先将这一个知识点学习一下。 矩阵和行列式的区别 各种矩阵的概念 矩阵运算 乘法☆ 总结三条不满足

并发 如何创建线程 多线程

进程&#xff1a;一个程序的执行过程 线程&#xff1a;一个方法就是一个线程 并发&#xff1a;多个线程抢夺一个资源 操作同一个对象 创建线程方法1 //创建线程方法1 继承Thread类 重写润方法 调用start开启线程 public class TestThead extends Thread{Overridepublic voi…

Linux常用命令(Linux入门)

Linux常用命令 文章目录 Linux常用命令1、Linux命令初体验2、文件目录操作命令2.1、ls2.2、cd2.3、cat2.4、more2.5、tail2.6、mkdir2.7、rmdir2.8、rm 3、拷贝移动命令3.1、cp3.1、mv 4、打包压缩命令tar命令 5、文本编辑命令vi/vim 6、查找命令6.1、find6.2、grep 1、Linux命…