LeetCode 102. 二叉树的层序遍历题目描述给你二叉树的根节点 root返回其节点值的层序遍历即逐层地从左到右访问所有节点。示例:输入: root [3,9,20,null,null,15,7] 输出: [[3],[9,20],[15,7]] 3 / \ 9 20 / \ 15 7题解BFS广度优先搜索核心思路用队列逐层处理节点。关键在于在每层开始时记录队列长度这个长度就是当前层的节点数从而将同一层的节点归到同一个子数组中。TypeScript 实现classTreeNode{val:number;left:TreeNode|null;right:TreeNode|null;constructor(val?:number,left?:TreeNode|null,right?:TreeNode|null){this.valvalundefined?0:val;this.leftleftundefined?null:left;this.rightrightundefined?null:right;}}functionlevelOrder(root:TreeNode|null):number[][]{constresult:number[][][];if(rootnull)returnresult;constqueue:TreeNode[][root];while(queue.length0){constlevelSizequeue.length;// 当前层的节点数constcurrentLevel:number[][];for(leti0;ilevelSize;i){constnodequeue.shift()!;// 出队currentLevel.push(node.val);if(node.left)queue.push(node.left);if(node.right)queue.push(node.right);}result.push(currentLevel);}returnresult;}复杂度分析指标 复杂度 说明时间 O(n) 每个节点恰好入队、出队一次空间 O(n) 队列最多存一层的节点最坏完全二叉树叶子层约 n/2代码要点说明levelSize 是关键进入 while 循环时先保存 queue.length本次循环只处理这 levelSize 个节点新入队的子节点留给下一轮从而自然分层。queue.shift() 与性能JS 数组的 shift() 是 O(n) 操作。若追求更优性能可用索引指针代替 shiftfunctionlevelOrder(root:TreeNode|null):number[][]{constresult:number[][][];if(!root)returnresult;constqueue:TreeNode[][root];lethead0;// 队头指针避免 shift 的 O(n) 开销while(headqueue.length){constlevelSizequeue.length-head;constcurrentLevel:number[][];for(leti0;ilevelSize;i){constnodequeue[head];currentLevel.push(node.val);if(node.left)queue.push(node.left);if(node.right)queue.push(node.right);}result.push(currentLevel);}returnresult;}递归DFS写法也可行用一个 depth 参数标记层级把节点值 push 到 result[depth] 中但本题 BFS 更直观。DFS 递归写法补充functionlevelOrder(root:TreeNode|null):number[][]{constresult:number[][][];constdfs(node:TreeNode|null,depth:number):void{if(!node)return;if(!result[depth])result[depth][];result[depth].push(node.val);dfs(node.left,depth1);dfs(node.right,depth1);};dfs(root,0);returnresult;}
企业数字化 ERP 产品动态
相关推荐
Linux中的高级IO 目录
一、五种IO基本模型
二、select
三、poll
四、epoll
一、五种IO基本模型
IO的本质:等待数据就绪 将数据从内核拷贝到用户空间
1. 阻塞IO:在内核数据准备好之前,系统调用一直处于等待状态,所有套接字,默认… · 2026/9/24 17:53:49
时间轮设计和正则表达式使用方法 个人主页:小则又沐风 个人专栏: • [数据结构] • [竞赛专栏] • [C语言] • [C] • [Linux] • [OJ项目] • [MySQL] •[GIT] 时间轮
1.什么是时间轮
我们先不来讲解什么是时间轮,我们先来讲解一下我们在写代码的时候我们可能遇到的问题。… · 2026/9/24 17:53:49
12.常见的transforms(一) 输入类型:重点关注三种输入格式:
PIL格式:使用Image.open()读取
Tensor格式:使用ToTensor()转换
numpy数组:使用cv.imread()读取
输出类型:不同Transform的输出格式可能不同,需要特别注意
作用&… · 2026/9/24 17:53:49
Unity Addressables 异步操作句柄详解:加载、释放与内存管理实践 从 AssetBundle 时代靠手写加载流程、自己维护依赖树和引用计数,到切到 Addressables 之后只需要对着一个异步句柄操作,这个过渡期最容易让人懵掉的就是“Handle”到底是个什么东西。AssetBundle 那套逻辑里,我们习惯了“先加载 bundle&#… · 2026/9/24 19:07:53
地面油污水渍检测数据集:2093张图与2563个框的YOLO训练实战 简介:这份目标检测数据集面向环境监控、工业现场安全检测方向的研究者与算法工程师,聚焦地面油污水渍的识别与定位任务。数据包共2000个文件,以1999个VOC格式xml标注文件和1个说明txt为主,压缩包约70.05MB,图片为jpg格… · 2026/9/24 19:07:53
蓝牙耳机排行榜水太深?拆解六大品牌与选购避坑指南 排行榜这东西,我劝你别只看名次。尤其是“蓝牙耳机排行榜10强”这类标题,隔三差五就刷屏一次,点进去要么是电商销量汇总,要么是小编按自己的喜好排的。真正的问题在于:销量高和口碑好,很多时候是两拨不同的… · 2026/9/24 19:07:53
XSS攻击原理与防御:从信任边界到三层防护体系 1. XSS 攻击的本质:这不是一个注入问题,而是一个信任边界问题做前端这几年,我见过太多把 XSS 当"小事"的团队。问起来都是"我们做了输入过滤呀",结果呢?攻击者在 URL 参数里塞一段 payload&#x… · 2026/9/24 19:07:53
全色影像水体提取:阈值分割实战指南与精度验证 简介:这份资源面向遥感图像处理、地理信息系统与环境监测方向的初学者和工程实践者,聚焦如何利用阈值分割技术从全色影像中快速识别并提取水体区域。全色影像空间分辨率高、地表细节丰富,是水体检测的重要数据源,而阈值分割作为最… · 2026/9/24 19:07:53
彻底卸载流氓软件:从识别、清理到卡顿优化全攻略 弄电脑这些年,我见过太多人因为"卸不干净"而重装系统,也有人愁眉苦脸地问"怎么我装了杀毒软件电脑还这么卡"——结果我过去一看,系统里躺着七八个全家桶软件,光启动项就有十几个,能不卡吗。今天这… · 2026/9/24 19:07:46
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44