【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

JAVA 动态代理:从原理剖析到实战应用

JAVA 动态代理:从原理剖析到实战应用

JAVA 动态代理:从原理剖析到实战应用 1.1 本章学习目标与重点 💡 掌握动态代理的核心概念与分类,理解动态代理在 Java 开发中的核心价值。 💡 熟练掌握 JDK 动态代理的实现流程与核心 API,能够独立编写 JDK 动态代理代码。 💡 了解 CGLIB 动态代理的实现原理与适用场景,对比 JDK 动态代理与 CGLIB 动态代理的差异。 💡 结合实际业务场景,掌握动态代理在 AOP 编程、权限控制、日志记录等场景中的实战应用。 ⚠️ 本章重点是 JDK 动态代理的核心实现 和 动态代理在 AOP 中的实战应用,这是 Java 高级开发与框架设计的必备技能。 1.2 动态代理的核心概念与价值 1.2.1 什么是动态代理 💡 动态代理 是

By Ne0inhk

Java 单元测试自动化:手把手教你用 Claude Skills 生成高质量测试代码

Java 单元测试自动化:手把手教你用 Claude Skills 生成高质量测试代码 * 前言 * 一、什么是 Claude Skills? * 1.1 核心概念 * 1.2 为什么需要 Skill? * 二、创建 Java 单元测试 Skill * 2.1 准备工作 * 2.2 编写 SKILL.md * YAML 元数据 * 主体内容结构 * 2.3 核心:触发条件与前置检查 * 触发条件定义 * 前置检查清单 * 三、测试代码生成规范详解 * 3.1 测试类命名规范 * 3.2 导入声明规范 * 3.3

By Ne0inhk
什么是人工智能?AI、机器学习、深度学习的关系

什么是人工智能?AI、机器学习、深度学习的关系

文章目录 * 什么是人工智能 * 人工智能的定义 * 人工智能的分类 * 什么是机器学习 * 机器学习的基本概念 * 机器学习的工作流程 * 机器学习的主要类型 * 什么是深度学习 * 深度学习的基本概念 * 深度学习的优势 * 深度学习的应用领域 * AI、机器学习、深度学习的关系 * 三者的层次关系 * 三者的发展历程 * 如何选择合适的方法 * 实际应用案例分析 * 案例一:垃圾邮件过滤 * 案例二:图像识别 * 案例三:推荐系统 * 学习路径建议 * 第一阶段:打好基础 * 第二阶段:深入学习 * 第三阶段:实战提升 * 总结 本篇文章将带你深入理解人工智能的核心概念,厘清AI、机器学习、深度学习之间的关系,为后续的学习打下坚实的基础。 什么是人工智能 人工智能的定义 人工智能,英文名称为Artificial Intelligence,简称AI,这个概念最早由约翰·麦卡锡在1956年的达特茅斯会议上提出。那么什么是人工智能呢?简单来说,人工智能就

By Ne0inhk
Excel-Agent永久买断,一款结合AI Agent的excel数据处理智能体

Excel-Agent永久买断,一款结合AI Agent的excel数据处理智能体

今天为大家介绍一款自主研发的支持Excel大数据量处理的AI-Agent,Excel-Agent是一个智能Excel数据处理助手,它紧跟人工智能时代,专注于通过先进的AI技术为用户提供智能化的数据处理服务。这个工具的核心优势在于能够自动化处理复杂的数据清洗、转换和分析任务,让用户从繁琐的手动操作中解脱出来。 一、大模型支持 Excel-Agent支持接入本地化大模型和硅基流动的接口,可以调用DeepSeek、Qwen、Kimi等多种大模型进行python编程。在数据处理方面,ExcelAgent展现出强大的智能识别能力。它能够自动检测数据中的异常值、缺失值和重复数据,并提供相应的清洗方案。 二、大数据量秒级响应 传统 Excel 一旦行数超过几十万就开始卡顿,Excel-Agent 把数据放进内存里的“高速跑道”——pandas + 向量化计算,上百万行也能秒级完成排序、筛选、聚合;再配合分块读写,哪怕电脑只有 8 G 内存,也能稳稳吃下千万行级别的表,边处理边释放内存,不会把机器拖垮。 三、多表分析零公式 VLOOKUP太烧脑?直接说“把订单表和客户表按客户

By Ne0inhk