当前位置: 首页 > news >正文

【Leetcode hot 100】102.二叉树的层序遍历

问题链接

102.二叉树的层序遍历

问题描述

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:
在这里插入图片描述

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

示例 2:

输入:root = [1]
输出:[[1]]

示例 3:

输入:root = []
输出:[]

提示:

  • 树中节点数目在范围 [0, 2000]
  • -1000 <= Node.val <= 1000

问题解答

解题思路

二叉树的层序遍历(逐层从左到右访问节点)核心是利用 广度优先搜索(BFS),通过「队列」数据结构实现层级分隔:

  1. 队列特性:先进先出(FIFO),可保证同一层级的节点依次处理,且子节点按顺序进入下一层级。
  2. 层级控制:每次处理前,记录当前队列的大小(即当前层级的节点数),仅处理该数量的节点,确保每次循环对应一个完整层级。
  3. 边界处理:若根节点为 null,直接返回空列表;若节点无左/右子树,跳过不入队。

完整代码实现

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;// 二叉树节点定义(LeetCode 题目已默认提供,此处为完整性展示)
class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val = val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}
}public class LevelOrderTraversal {public List<List<Integer>> levelOrder(TreeNode root) {// 结果列表:存储每一层的节点值List<List<Integer>> result = new ArrayList<>();// 边界条件:根节点为null,直接返回空结果if (root == null) {return result;}// 队列:用于BFS,存储待处理的节点(LinkedList实现Queue接口)Queue<TreeNode> queue = new LinkedList<>();// 根节点入队,启动BFSqueue.offer(root);// 循环处理队列,直到所有层级遍历完成while (!queue.isEmpty()) {// 1. 记录当前层级的节点数(关键:确保只处理当前层的节点)int currentLevelSize = queue.size();// 存储当前层级的节点值List<Integer> currentLevel = new ArrayList<>();// 2. 遍历当前层级的所有节点for (int i = 0; i < currentLevelSize; i++) {// 节点出队TreeNode node = queue.poll();// 将当前节点值加入当前层级列表currentLevel.add(node.val);// 3. 左子节点非null则入队(下一层级节点)if (node.left != null) {queue.offer(node.left);}// 右子节点非null则入队(下一层级节点)if (node.right != null) {queue.offer(node.right);}}// 4. 当前层级处理完毕,加入结果列表result.add(currentLevel);}return result;}// 测试用例(示例1)public static void main(String[] args) {LevelOrderTraversal solution = new LevelOrderTraversal();// 构建示例1的二叉树:root = [3,9,20,null,null,15,7]TreeNode root = new TreeNode(3);root.left = new TreeNode(9);root.right = new TreeNode(20);root.right.left = new TreeNode(15);root.right.right = new TreeNode(7);// 执行层序遍历List<List<Integer>> result = solution.levelOrder(root);// 输出结果(预期:[[3], [9,20], [15,7]])System.out.println(result);}
}

代码解释

  1. TreeNode 类:定义二叉树节点结构,包含值、左子树和右子树引用(LeetCode 环境中无需手动定义,此处为便于本地测试)。
  2. levelOrder 方法
    • 初始化result 存储最终结果,queue 用于BFS,根节点入队启动遍历。
    • 层级循环:队列非空时,记录当前层级节点数 currentLevelSize,确保仅处理当前层节点。
    • 节点处理:弹出队列节点,加入当前层级列表;若存在左/右子节点,入队待处理(下一层级)。
    • 结果收集:当前层级遍历完毕后,将其加入 result
  3. main 方法:构建示例1的二叉树,调用 levelOrder 方法并输出结果,验证逻辑正确性。

复杂度分析

  • 时间复杂度O(n),其中 n 为二叉树节点总数。每个节点仅入队和出队一次,遍历次数与节点数成正比。
  • 空间复杂度O(n),最坏情况下(满二叉树),队列需存储最后一层的所有节点(最多 n/2 个),空间占用为 O(n)

文章转载自:

http://h0FdGxwU.tjjkn.cn
http://5PrMRwsP.tjjkn.cn
http://1YXCPhG3.tjjkn.cn
http://DUzDkexu.tjjkn.cn
http://ORPkxeaY.tjjkn.cn
http://OLjZor8X.tjjkn.cn
http://CDL2obNi.tjjkn.cn
http://v7lakLzg.tjjkn.cn
http://fRmLHLJw.tjjkn.cn
http://HEoyo1R0.tjjkn.cn
http://yBQChTsj.tjjkn.cn
http://yhCgWxOn.tjjkn.cn
http://CmYw5B5x.tjjkn.cn
http://6b84BbgB.tjjkn.cn
http://ejgDO6Mx.tjjkn.cn
http://kXfKXZ2l.tjjkn.cn
http://IhU0LHV9.tjjkn.cn
http://YtL8vwFE.tjjkn.cn
http://wFIQEYGd.tjjkn.cn
http://Jm3Q8dTW.tjjkn.cn
http://Xz9LG6S9.tjjkn.cn
http://kGrTAheT.tjjkn.cn
http://cjyRGJuN.tjjkn.cn
http://SiqDwtV0.tjjkn.cn
http://YZxSFpea.tjjkn.cn
http://RRfqKPvs.tjjkn.cn
http://I22GQMbm.tjjkn.cn
http://2sCz8ElJ.tjjkn.cn
http://XK7AVraF.tjjkn.cn
http://BzhBXR0E.tjjkn.cn
http://www.dtcms.com/a/384377.html

相关文章:

  • [Windows] 微软 .Net 运行库离线安装包 | Microsoft .Net Packages AIO_v09.09.25
  • java通过RESTful API实现两个项目之间相互传输数据
  • C++基础(13)——list类的模拟实现
  • C#/.NET/.NET Core技术前沿周刊 | 第 54 期(2025年9.8-9.14)
  • 快速上手 Jenkins
  • 【C++】STL--List使用及其模拟实现
  • Go语言双向链表list.List详解
  • 机器学习-Boosting
  • Jenkins运维之路(Jenkins流水线改造Day02-2-容器项目)
  • 【C++STL】list的详细用法和底层实现
  • Elastic APM 与 Elasticsearch 集成:构建完整可观测性栈
  • 从零搭建MCP Server:Python开发、部署与应用全流程实战
  • Mac本地Docker拉取镜像本地挂载项目
  • 购物车效果
  • 在Ubuntu 18.0.4 编译最新版Python-3.13.7
  • 如何在ubuntu下用pip安装aider,解决各种报错问题
  • Redis 高可用实战源码解析(Sentinel + Cluster 整合应用)
  • 测井曲线解读核心三属性(岩性 / 物性 / 含油气性)实用笔记
  • 【图像理解进阶】VLora参数融合核心原理与Python实现
  • Leetcode 169. 多数元素 哈希计数 / 排序 / 摩尔投票
  • EasyPoi:java导出excel,并从OSS下载附件打包zip,excel中每条记录用超链接关联附件目录
  • Win10系统下载并安装声卡驱动
  • JavaEE初阶——初识计算机是如何工作的:从逻辑门到现代操作系统
  • CKA05--service
  • 信息安全专业毕业设计选题推荐:课题建议与开题指导
  • 【LeetCode 每日一题】1792. 最大平均通过率——贪心 + 优先队列
  • 【深度学习计算机视觉】05:多尺度目标检测
  • Docker将镜像搬移到其他服务上的方法
  • WiseAI-百度研发的AI智能聊天产品
  • .NET驾驭Word之力:理解Word对象模型核心 (Application, Document, Range)