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

LeetCode 102. 二叉树的层序遍历,BFS(广度优先搜索)(Python)

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

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

输入:root = [1] 输出:[[1]] 示例 3:

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

102. 二叉树的层序遍历

解题思路

  1. 广度优先搜索(BFS):层序遍历的核心是通过队列实现广度优先搜索。逐层处理节点,确保每一层的节点按顺序访问。
  2. 队列初始化:将根节点加入队列。
  3. 逐层处理:
    • 每次循环开始时,记录当前层的节点数量 level_size(即队列的长度)。
    • 遍历这些节点,依次取出并记录它们的值。
    • 将当前节点的左、右子节点(如果存在)加入队列,作为下一层的待处理节点。
  4. 结果记录:将每一层的节点值列表添加到最终结果中。
def levelOrder(root):
    if not root:
        return []
    result = []
    queue = collections.deque([root])
    while queue:
        level_size = len(queue)
        current_level = []
        for _ in range(level_size):
            node = queue.popleft()
            current_level.append(node.val)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
        result.append(current_level)
    return result

collections.deque 是 Python 中的一个模块,用于创建双端队列(deque,double-ended queue 的缩写)。双端队列是一种可以在两端进行高效插入和删除操作的数据结构。
例如,可以使用 collections.deque 来实现队列(先进先出)和栈(后进先出)的数据结构。它提供了诸如 append(在右侧添加元素)、appendleft(在左侧添加元素)、pop(从右侧删除元素)、popleft(从左侧删除元素)等方法。

官方解法:

def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
    if not root: return []
    res, queue = [], collections.deque()
    queue.append(root)
    while queue:
        tmp = []
        for _ in range(len(queue)):
            node = queue.popleft()
            tmp.append(node.val)
            if node.left: queue.append(node.left)
            if node.right: queue.append(node.right)
        res.append(tmp)
    return res

相关文章:

  • CCF-CSP第29次认证第一题 --《田地丈量》
  • C#使用winform实现简单的梯形图指令编译和执行,带编译器和虚拟机代码
  • 浏览器安全问题
  • Go语言集成DeepSeek API和GoFly框架文本编辑器实现流式输出和对话(GoFly快速开发框架)
  • 【maven】maven依赖报错解决方式
  • 数据分析/数据科学常见SQL题目:连续登录用户、留存率、最大观看人数
  • typora高亮方案+鼠标侧键一键改色
  • 根据歌词自动构建音乐 python
  • 本地部署DeepSeek R1大数据模型知识库
  • 专题·大模型安全 | 大模型的安全挑战及应对建议
  • springboot3 RestClient、HTTP 客户端区别
  • C++蓝桥杯基础篇(八)
  • iOS 聊天 IM 消息收发管理工具
  • 淘宝关键字搜索接口爬虫测试实战指南
  • 【DuodooTEKr 】多度科技 以开源之力,驱动企业数字化转型
  • GreatSQL5.7 与 8.0 对 DATE 非法值处理方式不同
  • e2studio开发RA2E1(15)----配置RTC时钟及显示时间
  • STM32使用有源蜂鸣器
  • Lab16_ Blind SQL injection with out-of-band interaction
  • RabbitTemplate类介绍、应用场景和示例代码
  • 济宁做网站公司/佐力药业股票
  • 哪个网站可以做纸箱/郑州互联网公司排名
  • 网站大量死链/网络营销策划方案
  • 电影视频网站怎么做/网页推广怎么做
  • 重庆网站推广/哪里可以免费推广广告
  • 建设电子商务网站的方法有/seo自然排名优化