Hot 100 --- 二叉树的层序遍历
📅 2026/7/14 20:19:15
👁️ 次浏览
本文概览本文以LeetCode题目二叉树的层序遍历为例详细讲解BFS广度优先搜索的原理和实现重点说明为什么用队列、队列如何保证层序、以及如何按层分组输出一、题目二、题目分析题目要求按层从上到下、从左到右遍历二叉树每一层的节点值放在一个列表中最终返回一个列表的列表比如3 / \ 9 20 / \ 15 7 输出[[3], [9, 20], [15, 7]]这道题的核心就是BFS广度优先搜索也叫层序遍历。和之前用递归DFS“一根筋往下钻不同BFS 是一层一层扫”思路概览Java 实现代码如下publicListListIntegerlevelOrder(TreeNoderoot){ListListIntegerresnewArrayList();if(rootnull){returnres;}QueueTreeNodequeuenewLinkedList();// 根节点入队queue.offer(root);while(!queue.isEmpty()){// 当前层的节点数intsizequeue.size();ListIntegerlistnewArrayList();// 逐个处理当前层的节点for(inti0;isize;i){TreeNodenodequeue.poll();list.add(node.val);// 左孩子入队if(node.left!null){queue.offer(node.left);}// 右孩子入队if(node.right!null){queue.offer(node.right);}}res.add(list);}returnres;}思路简要说明用队列来控制遍历顺序先进先出保证从左到右每轮开始前记录队列大小size这就是当前层的节点数逐个出队当前层的节点把值加入结果同时把左右孩子依次入队一轮结束当前层处理完毕队列里剩下的是下一层的节点三、思路详解DFS vs BFS两种遍历思路先回顾一下中序遍历DFS它的遍历路径是一根筋往下钻3 / \ 9 20 / \ 15 7 中序遍历DFS9 → 3 → 15 → 20 → 7 先一条路走到黑9再回退再走到黑15再回退... 深度优先纵向展开而层序遍历BFS是一层一层扫3 / \ 9 20 / \ 15 7 层序遍历BFS[3] → [9, 20] → [15, 7] 先扫第一层再扫第二层再扫第三层... 广度优先横向展开DFS 是先往深处走BFS 是先往宽处走。DFS 靠递归实现BFS 靠队列实现为什么用队列BFS 的核心数据结构是队列Queue。队列的特性是先进先出FIFO这正好满足按层顺序处理的需求想一想要按层遍历就必须先处理上层的节点再处理下层的节点。队列的先进先出保证了当前层的节点先入队所以先出队孩子节点后入队所以等当前层都出完了下一层才轮到出队用一个形象的比喻队列就像一条排队的通道。当前层的人在前面处理处理完一个就把他的孩子下一层的节点排到队伍末尾。等前面这一批人都处理完了下一批人自然就排到了队伍前面整个流程可以概括为一句话把当前层的节点依次出队出队的同时把它们的孩子依次入队怎么按层分组题目要求每一层的节点放在一个单独的列表中所以关键问题是怎么区分哪些节点属于同一层答案在于每轮开始前队列里恰好只有当前层的节点为什么因为上一轮出队时把当前层的节点都出完了只留下了它们的孩子们即下一层的节点。所以每轮开始时queue.size()就是当前层的节点数这个size非常关键——它告诉我们这轮要出队几个节点。用 for 循环精确地出队size个节点就不会多出下一层的节点size必须在 for 循环外记录。如果放在循环条件里用queue.size()因为循环中会往队列加入新节点孩子大小会不断变化导致一轮处理了多层的节点图解完整过程3 / \ 9 20 / \ 15 7初始队列 [3]第 1 轮处理第 1 层当前队列大小 1说明第 1 层有 1 个节点队列[3] 出队 3 → 加入结果 [3] 3 有左孩子 9 → 入队 3 有右孩子 20 → 入队 队列变为[9, 20]第 2 轮处理第 2 层当前队列大小 2说明第 2 层有 2 个节点队列[9, 20] 出队 9 → 加入结果 [3, 9] 9 没有左孩子 9 没有右孩子 队列变为[20] 出队 20 → 加入结果 [3, 9, 20] 20 有左孩子 15 → 入队 20 有右孩子 7 → 入队 队列变为[15, 7]第 3 轮处理第 3 层当前队列大小 2说明第 3 层有 2 个节点队列[15, 7] 出队 15 → 加入结果 [3, 9, 20, 15] 15 没有左孩子 15 没有右孩子 队列变为[7] 出队 7 → 加入结果 [3, 9, 20, 15, 7] 7 没有左孩子 7 没有右孩子 队列变为[]空队列空了遍历结束。最终结果按层分组[[3], [9, 20], [15, 7]]可以看到每一轮开始时队列中恰好是当前层的所有节点。这是因为上一轮出队当前层节点的同时把它们的孩子下一层节点入队了。等当前层全部出队完毕队列里就只剩下下一层的节点入队顺序先左后右题目要求从左到右遍历所以入队顺序必须是先左孩子后右孩子。因为队列是先进先出的先入队的先出队所以先入队左孩子就能保证同一层中左边的节点先被处理如果先入队右孩子再入队左孩子同一层的节点就会变成从右到左的顺序不符合题目要求复杂度分析时间复杂度O(n)每个节点恰好入队一次、出队一次空间复杂度O(n)队列中最多同时存放一层节点最坏情况完全二叉树最后一层约为 n/2 个节点
1. 从零创建ASMX WebService项目第一次接触ASMX WebService时,我也被那些专业术语搞得一头雾水。后来发现,这其实就是用C#快速搭建接口服务的经典方案。下面我会用最直白的语言,带你一步步完成项目创建。打开Visual Studio(我用的…
📅 2026/7/14 20:19:15
1. 项目概述:为什么“手动创建ROS package”是每个ROS学习者绕不开的第一道门槛刚接触ROS的人,常被“catkin_make”“package.xml”“CMakeLists.txt”这些词绕得头晕。我带过几十个从零起步的机器人方向学生和转行工程师,发现一个惊人共性&a…
📅 2026/7/14 20:19:15
最近在技术社区看到不少关于"reaction神探狄仁杰第二部30评论自提网盘版"的讨论,这个看似娱乐化的标题背后,其实涉及到一个重要的技术问题:如何构建一个能够理解复杂影视内容并生成高质量评论的AI系统。如果你正在研究自然语言处理…
📅 2026/7/14 20:19:15
回想2018年,那时候的日子过得真快。好像昨天还在纠结工作,今天就已经是几年后了。很多人现在翻旧账,或者在研究过去的星象。特别是提到 2018水瓶座 geo 这个概念的时候。大家总是想从过去找答案,看看自己为什么那样选。我那时候也是水瓶座,正处在一种很矛盾的状态。上半年…
📅 2026/7/14 20:59:23
1. 项目背景与核心需求在工业自动化、机器人控制等高精度运动场景中,电机驱动与控制器件的选型直接决定了系统的响应速度、定位精度和稳定性。A3908(Allegro MicroSystems)是一款专为精密运动控制设计的全桥MOSFET驱动器,而ATSAME…
📅 2026/7/14 20:59:26
我不能按照您的要求生成关于该CVPR 2022荣誉提名论文的博文。原因如下:该输入内容存在严重的信息缺失与合规风险:核心内容完全空缺:项目正文仅为一段媒体推广文案(含赞助邀约、邮件订阅导流、平台引流话术),…
📅 2026/7/14 20:59:26
OpenClaw 小龙虾 v2.7.9 搭建全解|Windows10 本地桌面 AI 智能体实操指南
适配系统:Windows10 64 位设备 全文说明:整套搭建流程全程可视化操作,无需手动配置各类运行环境,安装包整合全部依赖组件,针对 Wi…
📅 2026/7/14 20:59:26
1. 项目概述:为什么“遗传算法第二讲”比第一讲更值得你花时间重读“遗传算法”这四个字,十年前在高校课堂里是《人工智能导论》最后一章的冷门配角,五年后成了算法岗面试必问的“经典老题”,而今天——它已经悄悄长进了工业级推荐…
📅 2026/7/14 20:59:26
在日常办公中,制作PPT和打印发票是两项常见但耗时的工作。传统方式下,我们需要手动设计PPT模板、整理内容,还要配置复杂的发票打印系统。WPS大会员2年卡(744天)提供的AI写PPT功能和打印发票系统管理能力,正…
📅 2026/7/14 20:59:26
从“创始人投影”到“真理映射”——大语言模型认知本质的哲学批判与范式重构
摘要
当前全球主流大语言模型(LLMs)在技术指标上持续突破,却在认知本质上陷入了一种根本性的“搞反”状态:它们本应成为人类超越自身认知局限的“传…
📅 2026/7/14 0:00:05
Hadoop 3.2.2 JDK 21 Windows开发环境全流程实战指南对于需要在Windows环境下进行大数据开发的Java/Scala开发者来说,搭建一个本地Hadoop开发环境是入门的第一步。本文将带你从零开始,完成Hadoop 3.2.2与JDK 21的环境搭建,并实现一个完整的M…
📅 2026/7/14 0:00:05
1. 项目概述:为什么你需要Boost库? 如果你用C写过一些项目,尤其是涉及到网络、并发、文件系统或者需要处理一些复杂数据结构时,大概率会听过或者用过Boost库。它不是C标准库的一部分,但它在C社区的地位,几…
📅 2026/7/14 0:00:05
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/14 6:35:02
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/14 12:06:52
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/14 7:15:18
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/14 15:11:56
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/13 19:47:36
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/14 15:11:56