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

二叉树题解——二叉树的层序遍历【LeetCode】队列实现

102. 二叉树的层序遍历

一、算法逻辑(逐步通顺讲解每一步思路)

目标是从上到下、从左到右逐层返回二叉树的节点值。


✅ 1️⃣ 空树特判

  • 如果 rootNone,直接返回空列表 []


✅ 2️⃣ 初始化数据结构

  • deque 创建一个队列 q 并将 root 加入;

  • ans 存放最终结果,初始化为空列表。


✅ 3️⃣ 层序遍历主循环(BFS)

使用 while q: 表示只要队列不空,就持续处理下一层。

⬇ 每一层逻辑如下:
  • vals 是当前层的节点值列表;

  • for _ in range(len(q)): 用来一次性处理当前层的所有节点(因为 len(q) 是当前层节点个数);

  • 对于每个节点:

    • popleft() 从左边弹出当前节点;

    • 把它的 val 加入 vals

    • 若有左/右子节点,则加入队列,供下一层使用。

➕ 把本层值列表加入结果中
  • 每一层处理完后,将 vals 加入到 ans


✅ 4️⃣ 返回结果

  • 所有层遍历完后,返回 ans 即可。


二、核心点总结

这段写法与上一题思路一致,但在实现上有两个优化:

利用 deque 实现队列结构,避免了列表 pop(0) 带来的性能损耗。

  • popleft() 是 O(1) 时间复杂度;

  • for _ in range(len(q)): 能精确处理一层;

  • ✅ 代码结构更标准、更高效,更适合大型数据量的广度优先遍历。

class Solution:def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:if root is None:return []ans = []q = deque([root])while q:vals = []for _ in range(len(q)):node = q.popleft()vals.append(node.val)if node.left:  q.append(node.left)if node.right: q.append(node.right)ans.append(vals)return ans

三、时间复杂度分析

  • 每个节点入队出队各一次,做一次常数操作;

时间复杂度:O(n)n 为节点总数。


四、空间复杂度分析

  • 最坏情况下,某一层可能有 n/2 个节点同时在队列中(完全二叉树);

  • 最终结果 ans 也保存了所有节点值。

空间复杂度:O(n)


✅ 总结一句话

该队列版层序遍历通过 deque 优化了队列操作,是广度优先搜索在树结构上的最标准实现,在 O(n) 时间和 O(n) 空间复杂度下,稳定、高效、易读,是生产代码中常用的 BFS 模板之一。

http://www.dtcms.com/a/266155.html

相关文章:

  • Java中Stream流的使用
  • Web攻防-文件上传黑白名单MIMEJS前端执行权限编码解析OSS存储分域名应用场景
  • 设计模式(九)
  • 魔术方法__call__
  • Redis缓存架构实战
  • Selenium Base全新升级版:新一代自动化框架实战解析
  • Python 的内置函数 range
  • 高边驱动 低边驱动
  • 黑暗中的爆破(船讯网Ais爬虫暨爬虫实战js逆向学习经验分享)
  • 车载以太网-IP 掩码 vlan 端口
  • SciPy 安装使用教程
  • [特殊字符] 电子机械制动(EMB)产业全景分析:从技术演进到千亿市场爆发
  • 高通QCS8550部署YOLO-NAS模型与性能测试
  • 使用excel中的MATCH函数进行匹配数据
  • Python数据库软件:查询与预测功能集成系统
  • Linux常见指令以及权限理解
  • 使用 Flask 构建基于 Dify 的企业资金投向与客户分类评估系统
  • HTTP详细介绍
  • Windows 10 2016 长期服务版
  • 仿小红书交流社区(微服务架构)
  • day 58 python打卡
  • AppInventor2 标签内容过多,如何做到可上下滑动?
  • 【WRFDA教程第一期】运行观测预处理程序(OBSPROC)
  • 数据结构:数组在编译器中的表示(Array Representation by Compiler)
  • oracle锁表,oracle解锁表,oracle用户连接数
  • ArcGISPro应用指南:ArcGISPro制图全流程详解
  • 前端面试专栏-算法篇:17. 排序算法
  • Redis常见性能问题和解决方案有哪些?
  • 《UE5_C++多人TPS完整教程》学习笔记41 ——《P42 蹲伏(Crouching)》
  • Flutter基础(ListView.builder)