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

力扣刷题之102、二叉树的层序遍历

力扣刷题之102、二叉树的层序遍历

题目难度:中等
标签:树、广度优先搜索(BFS)、二叉树


题目描述

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

示例:

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

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

输入root = []
输出[]


解题思路

层序遍历是广度优先搜索(BFS)在二叉树中的典型应用。与深度优先搜索(DFS)不同,BFS 按“层”处理节点,非常适合用队列(Queue)来实现。

核心思想:

  • 使用队列存储待访问的节点。
  • 每次处理当前层的所有节点(通过记录当前队列大小)。
  • 将当前层节点值存入一个列表,再将该列表加入最终结果。
  • 同时把下一层的左右子节点加入队列,为下一轮做准备。

关键点:不能直接用queue.size()作为 for 循环条件,因为队列在循环中会动态变化。必须提前保存当前层的节点数量!


代码实现(Java)

/** * Definition for a binary tree node. * public 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; * } * } */classSolution{publicList<List<Integer>>levelOrder(TreeNoderoot){//创建结果列表,用于存储每一次的节点值List<List<Integer>>result=newArrayList<>();//边界情况:如果根节点为空,直接返回空列表if(root==null){returnresult;}//创建队列,用于BFS的起点Queue<TreeNode>queue=newLinkedList<>();queue.offer(root);//当队列不为空时,继续处理while(!queue.isEmpty()){//获取当前层的节点数量intlevelsize=queue.size();//创建列表存储当前层的所有节点值List<Integer>current=newArrayList<>();//处理当前层的所有节点for(inti=0;i<levelsize;i++){//从队列头部取出一个节点TreeNodeNode=queue.poll();//将当前节点的值添加到当前层的结果列表current.add(Node.val);//如果左子节点存在,将其加入到队列中if(Node.left!=null){queue.offer(Node.left);}//如果右子节点存在,将其加入到队列中if(Node.right!=null){queue.offer(Node.right);}}//将当前层的结果添加到最终结果列表中result.add(current);}//返回层序遍历的结果returnresult;}}

复杂度分析

  • 时间复杂度O(n)
    每个节点被访问一次,n 为树中节点总数。

  • 空间复杂度O(n)
    最坏情况下(完全二叉树),队列中最多存储约 n/2 个节点(最后一层)。


总结

层序遍历是树类问题的基础技能,掌握 BFS + 队列的写法,能轻松应对一大类“按层处理”的题目。所以要记住:先记录当前层大小,再循环处理,这是避免逻辑错误的关键!


http://www.jsqmd.com/news/93859/

相关文章:

  • LobeChat本地部署教程:保护数据隐私的同时享受AI乐趣
  • 期末文献研究论文的撰写规范与实践路径探析
  • DevC++也能接入AI?Seed-Coder-8B-Base让老IDE焕发新生
  • Markdown+Jupyter Notebook:打造优雅的AI实验日志
  • 好用的电动平车哪个公司好
  • 入侵检测体系升级指南:AWS 防火墙平台需具备的关键安全能力框架 - 品牌排行榜
  • ollama下载支持Qwen3-32B吗?最新兼容性测试结果
  • 深入 InnoDB 内核:Buffer Pool 中的 Flush List 到底解决了什么问题?
  • 手把手教你实现智能体React框架:大模型开发进阶指南(强烈推荐收藏)
  • 全电动平板车服务商
  • 企业内部智能客服新选择:基于LobeChat的定制化解决方案
  • AI 写论文终极 PK 结果出炉!虎贲等考 AI 凭实力成 2025 届毕业生的 “隐形导师”!
  • 防御网络攻击:AWS 引领的云安全平台关键能力框架与选型指南 - 品牌排行榜
  • 产品经理必看!掌握大模型的6大优势,建议收藏
  • InnoDB 脏页到底什么时候刷盘?一文彻底讲透 Flush List 与 Checkpoint 机制
  • GitHub上最受欢迎的PyTorch相关开源项目Top10
  • linux 系统:在现有 LAMP 环境下部署 ZABBIX 6.0 LTS
  • LobeChat能否集成代码解释器?实现AI编程辅助功能
  • 【Java毕设全套源码+文档】基于Java旅游民宿信息管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 多篇撤回!年发文暴增近万,这本曾经的1区TOP顶流口碑彻底崩塌!
  • DDoS 攻击有效防御:AWS 引领的云服务商平台级防护能力评估指标体系 - 品牌排行榜
  • 从git下载到vLLM部署:全流程大模型服务搭建指南
  • 【Java毕设全套源码+文档】基于Java技术疫情防控自动售货机系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • AutoGPT联网搜索功能如何启用?详细配置说明来了
  • VDD_EXT深度解析:低功耗设计中的原理与实践优化!
  • 消息不遗漏、回复不延迟,这个工具帮你抓牢小红书客户
  • 【强化学习】第四章:动态规划(DP)
  • RNDIS USB网络连接:不可或缺的配置项与实施步骤详解!
  • 在线简历工具怎么选?整理了 10 个常用网站,适合毕业生快速上手
  • LobeChat移动端适配体验报告:响应式设计是否到位?