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. 结果记录:将每一层的节点值列表添加到最终结果中。
python 复制代码
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(从左侧删除元素)等方法。

官方解法:

python 复制代码
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
相关推荐
傻啦嘿哟5 小时前
某短视频平台视频爬虫实战:抓取推荐流视频信息,绕过反爬的3种技巧
开发语言·爬虫·python
迷迭香yy6 小时前
集合竞价数据挖掘实战:用Python构建开盘信号识别系统
人工智能·python·数据挖掘
李昊哲小课8 小时前
fastapi sse websocket 奶茶店实时订单看板
人工智能·python·websocket·网络协议·fastapi·sse
2401_8445829510 小时前
工具包:软件架构设计的实用技巧与经验分享
python
RFID固定资产管理系统11 小时前
适配媒体行业的固定资产管理软件有哪些功能与核心优势
大数据·人工智能·python·媒体
SunnyDays101111 小时前
Python 为 PowerPoint 添加动画:进入、退出、动作路径与文本动画(详解)
python·powerpoint·动画·动画效果·文本动画
难以怀瑾12 小时前
pytest.param`与 allure.dynamic.title()全解析
python
玖玥拾13 小时前
LeetCode 88 合并两个有序数组
算法·leetcode
月光船幽幽13 小时前
Pytest配置实战:高效管理测试标记与覆盖
python·科技
leoZ23114 小时前
实战复盘:用 Claude Code 从零搭一个 GitHub PR 统计工具
java·人工智能·python·深度学习·自然语言处理·github·llama