【LeetCode经典题解】二叉树层序遍历:从思路拆解到代码实现,手把手教你搞定!

【LeetCode经典题解】二叉树层序遍历:从思路拆解到代码实现,手把手教你搞定!
在这里插入图片描述
🎁个人主页:User_芊芊君子
🎉欢迎大家点赞👍评论📝收藏⭐文章
🔍系列专栏:Java.数据结构
在这里插入图片描述


在这里插入图片描述


【前言】

二叉树的层序遍历是面试高频考点之一,它要求“逐层、从左到右”访问树的所有节点,最终返回每层节点值组成的二维列表。本文将通过一段代码,图文并茂的方式拆解其实现思路与核心逻辑。

文章目录:

一、二叉树层序遍历

二叉树层序遍历遵循“从上到下,从左到右”的原则访问树的所有节点,然后返回二维数组列表

在这里插入图片描述

二、思路分析

队列 + 分层循环

1.初始化“容器”

定义二维数组列表:List<List<Character>> ret = new ArrayList<>();
存储每层节点组成的列表;

2.空树处理:

判断跟是否为空,为空就直接返回ret

3.辅助:队列

  • 队列先进先出的原则符合层序遍历从上到下,从左到右的访问顺序
    Queue<TreeNode> queue = new LinkedList<>();
  • 先将根节点入队

4.循环逻辑处理

4.1 外层循环

队列只要不为空,就一直访问每个节点,直到全部处理完成

4.2 内层循环

  • 创建当前层容器: List<Character> curRow = new ArrayList<>();存储每层节点
  • 固定当前层节点数:int size = queue.size();获取队列当前长度
    (size可以确保当前层不会混入其他节点,因为后面处理时,会将下一层的节点入队)
  • 遍历当前每个节点
先出队:TreeNode cur = queue.poll();
然后存进当前层;
判断左右子节点是否为空,不为空就进队;
size–,直到当前层节点全部处理完成
在这里插入图片描述

三、代码展示

【注意】:注释详解

publicList<List<Character>>levelOrder(TreeNode root){//创建二维数组列表:储存每层节点List<List<Character>> ret =newArrayList<>();//空树处理if(root ==null){return ret;}//创建队列Queue<TreeNode> queue =newLinkedList<>();//进队 queue.offer(root);//外层循环:处理每一层while(!queue.isEmpty()){//当前层存储列表List<Character> curRow =newArrayList<>();//当前层节点树int size = queue.size();//内层循环:处理当前层while(size !=0){//出队TreeNode cur = queue.poll();//存入当前层 curRow.add(cur.val);if(cur.left !=null){ queue.offer(cur.left);}if(cur.right !=null){ queue.offer(cur.right);} size--;}//将当前层加入结果列表 ret.add(curRow);}return ret;}

四、总结

本次博客围绕二叉树层序遍历展开,其核心是遵循“从上到下、从左到右”的遍历原则,通过“二维列表存结果、队列辅助控顺序、嵌套循环分层次”的思路实现:先初始化结果容器并处理空树边界,再以队列存储待遍历节点,最后通过外层循环控制层级、内层循环处理层内节点(借助 size 变量固定当前层节点数),完成每层节点值的收集;这一实现不仅清晰完成了基础层序遍历,也为后续算法拓展提供了简洁框架,是二叉树广度优先遍历思路与实践结合的典型案例。

Read more

基于 Rust 与 DeepSeek 大模型的智能 API Mock 生成器构建实录:从环境搭建到架构解析

基于 Rust 与 DeepSeek 大模型的智能 API Mock 生成器构建实录:从环境搭建到架构解析

前言 在现代软件工程中,API 接口的开发与前端联调往往存在时间差。为了解耦前后端开发进度,Mock 数据(模拟数据)的生成显得尤为关键。传统的 Mock 数据生成依赖于静态 JSON 文件或简单的规则引擎,难以覆盖复杂的业务逻辑与语义关联。随着大语言模型(LLM)的兴起,利用 AI 根据 Schema 定义动态生成高保真的模拟数据成为可能。本文详细记录了使用 Rust 语言结合 DeepSeek-V3.2 模型构建智能 Mock 生成器的完整技术路径,涵盖操作系统层面的环境准备、Rust 工具链的深度配置、代码层面的异步架构设计以及编译期的版本兼容性处理。 第一部分:Linux 系统底层的构建环境初始化 Rust 语言的编译与链接过程高度依赖于底层的系统工具链。Rust 编译器 rustc 在生成二进制文件时,需要调用链接器(Linker)将编译后的对象文件(Object Files)与系统库(

By Ne0inhk
Android 蓝牙 BLE 扫描 Native 层架构与扫描流程剖析

Android 蓝牙 BLE 扫描 Native 层架构与扫描流程剖析

博主简介 byte轻骑兵,现就职于国内知名科技企业,专注于嵌入式系统研发,深耕 Android、Linux、RTOS、通信协议、AIoT、物联网及 C/C++ 等领域。乐于技术分享与交流,欢迎关注互动! 📌 主页与联系方式ZEEKLOG:https://blog.ZEEKLOG.net/weixin_37800531知乎:https://www.zhihu.com/people/38-72-36-20-51微信公众号:嵌入式硬核研究所邮箱:[email protected](技术咨询或合作请备注需求) ⚠️ 版权声明 本文为原创内容,未经授权禁止转载。商业合作或内容授权请联系邮箱并备注来意。 本文基于 Android 蓝牙源码中 BLE 扫描相关的 Native 层代码,以scanInitializeNative为入口,系统梳理 BLE 扫描从 JNI

By Ne0inhk
Spring Boot 安全认证与授权

Spring Boot 安全认证与授权

Spring Boot 安全认证与授权 22.1 学习目标与重点提示 学习目标:掌握Spring Boot安全认证与授权的核心概念与使用方法,包括Spring Security的定义与特点、Spring Boot与Spring Security的集成、Spring Boot与Spring Security的配置、Spring Boot与Spring Security的认证、Spring Boot与Spring Security的授权、Spring Boot与Spring Security的实际应用场景,学会在实际开发中处理安全认证与授权问题。 重点:Spring Security的定义与特点、Spring Boot与Spring Security的集成、Spring Boot与Spring Security的配置、Spring Boot与Spring Security的认证、Spring Boot与Spring Security的授权、Spring Boot与Spring Security的实际应用场景。 22.2 Spring Security概述 Spring

By Ne0inhk
Flutter 组件 cool_linter 适配鸿蒙 HarmonyOS 实战:静态代码治理,构建极致规范的代码质量红线与防腐架构

Flutter 组件 cool_linter 适配鸿蒙 HarmonyOS 实战:静态代码治理,构建极致规范的代码质量红线与防腐架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 cool_linter 适配鸿蒙 HarmonyOS 实战:静态代码治理,构建极致规范的代码质量红线与防腐架构 前言 在鸿蒙(OpenHarmony)生态迈向大规模协作、涉及超大规模代码仓治理及高性能基座重构的背景下,如何确保每一行代码都符合严苛的性能准则与安全规范,已成为决定系统长期稳定性的“架构防火墙”。在鸿蒙设备这类强调 AOT 极致优化与内存足迹(Memory Footprint)管控的环境下,如果团队代码依然充斥着魔法数字(Magic Numbers)、过度嵌套的逻辑块或泛滥的 dynamic 调用,由于由于静态分析缺失,极易由于由于“隐性技术债”导致线上环境不可预知的性能崩塌或内存泄漏。 我们需要一种能够深度定制规则、支持循环复杂度分析且具备“强类型纠偏”能力的静态检测方案。 cool_linter 为 Flutter 开发者引入了超越原生 Linter 的严苛检测范式。它利用高级分析插件机制,

By Ne0inhk