【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

基于YOLOv10算法的交通信号灯检测与识别

基于YOLOv10算法的交通信号灯检测与识别

目录 * 一.🦁 写在前面 * 1.1 实现模块划分 * 1.2 优化与实时性支持 * 二.🦁 相关技术与理论基础 * 2.1 各版本yolo对比 * 2.2 YOLOv10网络结构 * 三.🦁 结果分析 * 3.1 训练损失与验证损失分析 * 3.2 精确率(Precision)、召回率(Recall)和平均精度(mAP)分析 * 四.🦁 实现界面 * 4.1 用户界面实现 * 4.2 检测能力实现 * 4.3 视频处理检测 * 4.4 图片处理检测 * 五.🦁 写在最后 随着城市化进程的加速,交通问题日益严峻,特别是在智能交通和自动驾驶领域,

By Ne0inhk
LeetCode Hot100 刷题路线(Python版)

LeetCode Hot100 刷题路线(Python版)

目录 1. LeetCode Hot100 刷题笔记(1)—— 哈希、双指针、滑动窗口-ZEEKLOG博客 2. LeetCode Hot100 刷题笔记(2)—— 子串、普通数组、矩阵-ZEEKLOG博客 3. LeetCode Hot100 刷题笔记(3)—— 链表-ZEEKLOG博客 4. LeetCode Hot100 刷题笔记(4)—— 二叉树、图论-ZEEKLOG博客 5. LeetCode Hot100 刷题笔记(5)—— 回溯-ZEEKLOG博客 6. LeetCode Hot100 刷题笔记(6)—— 栈、堆-ZEEKLOG博客 7. LeetCode Hot100 刷题笔记(7)—— 贪心-ZEEKLOG博客 8.

By Ne0inhk
【高阶数据结构】第二弹---图的深度解析:从基本概念到邻接矩阵的存储与操作

【高阶数据结构】第二弹---图的深度解析:从基本概念到邻接矩阵的存储与操作

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C++详解】【Linux系统编程】【高阶数据结构】 目录 1、图的基本概念 2、图的存储结构 2.1、邻接矩阵 2.1.1、基本结构 2.1.2、图的创建 2.1.3、获取顶点下标 2.1.4、添加边 2.1.5、打印 2.1.6、测试 1、图的基本概念 图(Graph)是由顶点集合(V)及顶点间的边的集合(E)组成的一种数据结构:

By Ne0inhk
算法训练之哈希表

算法训练之哈希表

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥✨✨✨✨✨✨ 个人主页✨✨✨✨✨✨         这一篇博客开启算法学习的另外一个篇章——哈希表,准备好了吗~我们发车去探索算法的奥秘啦~🚗🚗🚗🚗🚗🚗 目录 前言😁 哈希表基础概念😍    适用场景😊 实现方式😁 关键注意事项😜 容器使用参考博客🐷 两数之和😊 判断是否为字符串重排😋 存在重复元素Ⅱ🤪 字母异位词分组😀 总结🙃 前言😁 哈希表基础概念😍            哈希表是一种用于存储数据的容器,本质是通过键值对(key-value)的形式组织数据。它的核心优势在于能实现元素的快速查找,理想情况下时间复杂度可达 O(1),远超二分查找的 O(log N)。 适用场景😊         当需要频繁查找某个特定元素时(例

By Ne0inhk