LeetCode--HOT100题(41)
目录
- 题目描述:102. 二叉树的层序遍历(中等)
- 题目接口
- 解题思路
- 代码
- PS:
题目描述:102. 二叉树的层序遍历(中等)
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
LeetCode做题链接:LeetCode-二叉树的层序遍历
示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
提示:
树中节点数目在范围 [0, 2000] 内
-1000 <= Node.val <= 1000
题目接口
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {}
}
解题思路
树的层序遍历可以用BFS,因为层序遍历要求的输入结果和BFS是不同的。层序遍历要求我们区分每一层,也就是返回一个二维数组。而BFS的遍历结果是一个一维数组,无法区分每一层。
思路如下:
1.创建一个空的结果列表res,这个列表用于存储每一层节点的值。
2.创建一个队列queue,并将根节点root加入队列。
3.当队列不为空时,执行以下操作:
- 获取当前队列的长度,即当前层的节点个数。
- 创建一个空的列表level,用于存储当前层的节点值。
- 遍历当前层的所有节点,对于每个节点,执行以下操作:
- 从队列中取出一个节点,并把它的值加入到列表level中。
- 如果这个节点有左子节点,那么将左子节点加入到队列中;如果这个节点有右子节点,那么将右子节点加入到队列中。
- 把列表level加入到结果列表res中。
4.最后返回结果列表res,这个列表中的每个元素都是一个列表,表示树的每一层的所有节点的值。
代码
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {// 创建一个二维列表,用于存储每一层的节点值List<List<Integer>> res = new ArrayList<>();// 创建一个队列,用于层序遍历Queue<TreeNode> queue = new ArrayDeque<>();// 如果根节点不为空,将其加入队列if (root != null) {queue.add(root);}// 当队列不为空时,进行循环while (!queue.isEmpty()) {// 获取当前层的节点个数int n = queue.size();// 创建一个列表,用于存储当前层的节点值List<Integer> level = new ArrayList<>();// 遍历当前层的每个节点for (int i = 0; i < n; i++) {// 取出队首节点TreeNode node = queue.poll();// 将节点值加入当前层的列表level.add(node.val);// 如果当前节点的左子节点不为空,将其加入队列if (node.left != null) {queue.add(node.left);}// 如果当前节点的右子节点不为空,将其加入队列if (node.right != null) {queue.add(node.right);}}// 将当前层的节点值列表加入结果列表res.add(level);}// 返回结果列表return res;}
}
成功!

PS:
感谢您的阅读!如果您觉得本篇文章对您有所帮助,请给予博主一个赞喔~
相关文章:
LeetCode--HOT100题(41)
目录 题目描述:102. 二叉树的层序遍历(中等)题目接口解题思路代码 PS: 题目描述:102. 二叉树的层序遍历(中等) 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地&am…...
微信小程序教学系列(6)
第六章:小程序商业化 第一节:小程序的商业模式 在这一节中,我们将探讨微信小程序的商业模式,让你了解如何将你的小程序变成一个赚钱的机器! 1. 广告收入 小程序的商业模式之一是通过广告收入赚钱。你可以在小程序中…...
小程序中的全局配置以及常用的配置项(window,tabBar)
全局配置文件和常用的配置项 app.json: pages:是一个数组,用于记录当前小程序所有页面的存放路径,可以通过它来创建页面 window:全局设置小程序窗口的外观(导航栏,背景,页面的主体) tabBar:设置小程序底部的 tabBar效果 style:是否…...
数据工厂调研及结果展示
数据工厂 一、背景 在开发自测、测试迭代测试、产品验收的过程中,都需要各种各样的前置数据,大致分为如下几类: 账号(实名、权益等级、注册等) 货源(优货、急走、相似、一手、普通货源等) …...
抓包相关,抓包学习
检查网络流量 - 提琴手经典 (telerik.com) Headers Reference - Fiddler Classic (telerik.com) 以上是fiddler官方文档 F12要勾选保留日志 不勾选的话跳转到新页面之前页面的日志不会在下方显示 会保留所有抓到的包 如果重定向到别的页面 F12抓包可能看不到响应信息,但是…...
云原生之使用Docker部署SSCMS内容管理系统
云原生之使用Docker部署SSCMS内容管理系统 一、SSCMS介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载SSCMS镜像五、部署SSCMS内容管理系统5.1 创建SSCMS容器5.2 检查SSC…...
uniapp -- 在组件中拿到pages.json下pages设置navigationBarTitleText这个值?
1:在 pages.json 文件中设置 navigationBarTitleText,例如: {"pages": [{"path": "pages/home/index","style": {"navigationBarTitleText": "首页",&...
Java获取环境变量和运行时环境信息和自定义配置信息
System.getenv() 获取系统环境变量 public static void main1() {Map<String, String> envMap System.getenv();envMap.entrySet().forEach(x-> System.out.println(x.getKey() "" x.getValue())); } System.getenv() 获取的是操作系统环境变量列表&…...
React入门 组件学习笔记
项目页面以组件形式层层搭起来,组件提高复用性,可维护性 目录 一、函数组件 二、类组件 三、 组件的事件绑定 四、获取事件对象 五、事件绑定传递额外参数 六、组件状态 初始化状态 读取状态 修改状态 七、组件-状态修改counter案例 八、this问…...
Windows商店引入SUSE Linux Enterprise Server和openSUSE Leap
在上个月的Build 2017开发者大会上,微软宣布将SUSE,Ubuntu和Fedora引入Windows 商店,反应出微软对开放源码社区的更多承诺。 该公司去年以铂金会员身份加入Linux基金会。现在,微软针对内测者的Windows商店已经开始提供 部分Linux发…...
[NLP]深入理解 Megatron-LM
一. 导读 NVIDIA Megatron-LM 是一个基于 PyTorch 的分布式训练框架,用来训练基于Transformer的大型语言模型。Megatron-LM 综合应用了数据并行(Data Parallelism),张量并行(Tensor Parallelism)和流水线并…...
软考高级系统架构设计师系列论文七十八:论软件产品线技术
软考高级系统架构设计师系列论文七十八:论软件产品线技术 一、摘要二、正文三、总结一、摘要 本人作为某软件公司负责人之一,通过对位于几个省的国家甲级、乙级、丙级设计院的考查和了解,我决定采用软件产品线方式开发系列《设计院信息管理平台》产品。该产品线开发主要有如…...
yolov5中添加ShuffleAttention注意力机制
ShuffleAttention注意力机制简介 关于ShuffleAttention注意力机制的原理这里不再详细解释.论文参考如下链接here yolov5中添加注意力机制 注意力机制分为接收通道数和不接受通道数两种。这次属于接受通道数注意力机制,这种注意力机制由于有通道数要求,所示我们添加的时候…...
Effective C++条款17——以独立语句将newed 对象置入智能指针(资源管理)
假设我们有个函数用来揭示处理程序的优先权,另一个函数用来在某动态分配所得的widget上进行某些带有优先权的处理: void priority(); void processWidget(std::tr1::shared_ptr<Widget>pw, int priority);由于谨记“以对象管理资源”(条款13&…...
奇迹MU服务器如何选择配置?奇迹MU服务器租用
不同的服务器,根据其特点与性能适用于不同的应用场景,为了让你们更好的理解,我们对服务器进行了分类归纳,结合了服务器不同的特点以及价位进行一个区分,帮助我们更好的选择合适的服务器配置。 VPS服务器 VPS服务器又…...
如何远程管理服务器详解
文章目录 前言一、远程管理类型二、远程桌面三、telnet 命令行远程四、查看本地开放端口 前言 很多公司是有自己的机房的,机房里面会有若干个服务器为员工和用户提供服务。大家可以想想:假设这家公司有上百台服务器,我们作为网络工程师&…...
JavaScript——为什么静态方法不能调用非静态方法
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...
Python实现常见的排序算法
当涉及到排序算法时,一些常见的排序算法包括插入排序、选择排序、冒泡排序、快速排序、归并排序和堆排序。以下是使用Python实现这些常见排序算法的示例代码: 插入排序(Insertion Sort): def insertionSort(arr):for…...
【git】fatal: refusing to merge unrelated histories
在一次重新初始化本地仓库后,拉取远程仓库时提示: fatal: refusing to merge unrelated histories 在“fatal: refusing to merge unrelated histories”(即,不知道彼此的存在,并已不匹配的项目提交历史)…...
在编辑器中使用正则
正则是一种文本处理工具,常见的功能有文本验证、文本提取、文本替换、文本切割等。有一些地方说的正则匹配,其实是包括了校验和提取两个功能。 校验常用于验证整个文本的组成是不是符合规则,比如密码规则校验。提取则是从大段的文本中抽取出…...
一体机-显控终端 国产化嵌入式处理板卡 产品规格说明书
一、产品概述MB-FT24A02是一款专为工业嵌入式、车载人机交互、国产化终端替代等场景设计的全国产化高性能处理板卡,采用紧凑型PCB设计,核心搭载飞腾FT-2000/4国产处理器,搭配飞腾X100专用国产桥片,构建全链路自主可控硬件平台&…...
VINS_Fusion轨迹评估实战:如何用evo工具搞定MH_01_easy数据集测试(附完整代码修改指南)
VINS_Fusion轨迹精度评估全流程:从数据准备到evo工具深度解析 1. 环境配置与工具准备 在开始评估VINS_Fusion的轨迹精度之前,我们需要确保开发环境已经正确配置。以下是必要的准备工作: 基础环境要求: Ubuntu 18.04/20.04 LTS&…...
OpenClaw飞书办公助手:Qwen3-VL:30B自动化会议纪要生成
OpenClaw飞书办公助手:Qwen3-VL:30B自动化会议纪要生成 1. 为什么需要自动化会议纪要 每次开完会最痛苦的事情是什么?对我来说就是整理会议纪要。作为团队的技术负责人,我每周要参加至少5场会议,从需求评审到技术方案讨论&#…...
当几何优化遇上时空建模:玩转TTAO-SE-CNN-LSTM黑科技
基于三角形拓扑结构优化算法优化卷积神经网络-长短时记忆网络结合SE注意力机制的数据分类预测(TTAO-SE-CNN-LSTM) 三角形拓扑结构优化算法TTAO优化长短时记忆网络隐藏层神经元数目、初始学习率和L2正则化参数 基于MATLAB环境 替换自己的数据即可 首先通过卷积神经网络提取数据…...
FaceFusion零基础换脸教程:5分钟搞定高清AI换脸,保姆级手把手教学
FaceFusion零基础换脸教程:5分钟搞定高清AI换脸,保姆级手把手教学 1. 前言:为什么选择FaceFusion 想试试AI换脸但被复杂的安装步骤劝退?FaceFusion可能是目前最简单易用的换脸工具。这个全新一代AI换脸工具无需安装,…...
毕业设计系统实战:从零构建高可用选题管理平台
毕业设计系统实战:从零构建高可用选题管理平台 高校毕业设计(论文)是本科教学的重要环节,但传统的线下或简易线上管理方式常常让师生和管理员头疼不已。每到选题季,系统卡顿、选题冲突、流程混乱、数据丢失等问题层出不…...
用Python+OpenCV实现双目视觉三维重建:从相机标定到triangulatePoints实战
PythonOpenCV双目视觉三维重建实战:从标定到点云生成 去年在开发一个AR眼镜原型时,我遇到了一个棘手的问题:如何让设备准确感知周围环境的深度。经过反复尝试,最终采用双目视觉方案完美解决了这个问题。本文将分享整个实现过程&am…...
避坑指南:在Ubuntu 20.04上搞定VINS-Fusion依赖(Ceres、Eigen、gflags报错全解决)
深度解析:Ubuntu 20.04部署VINS-Fusion的依赖陷阱与系统级解决方案 在机器人视觉与SLAM领域,VINS-Fusion作为香港科技大学开源的多传感器融合框架,已成为学术界和工业界的重要参考实现。然而当开发者满怀期待地克隆代码准备体验其强大功能时&…...
ST25DV64KC动态NFC标签Arduino驱动库详解
1. 项目概述SparkFun ST25DV64KC Arduino Library 是面向 ST25DV64KC 动态 NFC/RFID 标签的专用驱动库,专为 Qwiic 生态系统中的 SparkFun Qwiic Dynamic RFID Tag(型号 SPX-19035)设计。该库并非通用 NFC 协议栈,而是深度适配 ST…...
1746-NR4电阻模拟输入
1746-NR4 模拟输入模块(电阻输入)特点由 Allen-Bradley 生产,属于 SLC 500 系列类型为 模拟输入模块,专门用于电阻信号采集提供 4 路独立输入通道支持热电偶、RTD(热电阻)及其他电阻传感器输入精度高&#…...
