102.二叉树的层序遍历 python

【力扣-102.二叉树的层序遍历】Python笔记 摘要:本文详细解析LeetCode102题二叉树的层序遍历,重点讲解BFS算法中"队列+记录层大小"的核心技巧。通过分析为什么需要记录每一层节点数,揭示了分层遍历的关键所在,并提供Python代码实现。文章还深入探讨了时间复杂度(O(N))和空间复杂度(O(W)),帮助读者掌握这一基础算法模板,为后续解决类似问题(如求树深度、锯齿遍历等)打下坚实基础。 阅读详情

题目

题目描述

给你二叉树的根节点 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

题解

解题思路

为了实现二叉树的层序遍历(广度优先搜索),我们可以使用队列数据结构来帮助我们逐层访问每个节点。具体步骤如下:

  1. 如果根节点为空,直接返回空列表。
  2. 初始化一个队列,并将根节点加入队列中。
  3. 开始循环处理队列中的节点,直到队列为空:
    • 对于每一层,记录当前队列的长度(即该层的节点数)。
    • 初始化一个临时列表来存储当前层的所有节点值。
    • 遍历当前层的所有节点:从队列中取出节点,记录其值,并将其非空的左右子节点依次加入队列。
    • 将当前层的节点值列表添加到结果列表中。
  4. 返回结果列表。

python实现

下面是 Python 实现代码:

def levelOrder(root: TreeNode):
    if not root:
        return []

    result = []
    queue = deque([root])

    while queue:
        level_size = len(queue)
        level_nodes = []

        for _ in range(level_size):
            node = queue.popleft()
            level_nodes.append(node.val)

            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)

        result.append(level_nodes)

    return result

解释

  • TreeNode 类:定义了一个二叉树节点类,包含节点值 val、左子节点 left 和右子节点 right。
  • levelOrder 函数:实现了二叉树的层序遍历。
    • 首先检查根节点是否为空,如果为空则直接返回空列表。
    • 使用双端队列 deque 来作为辅助队列,首先将根节点加入队列。
    • 进入主循环,每次循环处理一层节点:
      • 记录当前层的节点数量 level_size。
      • 创建一个空列表 level_nodes 来保存当前层所有节点的值。
      • 循环 level_size 次,每次从队列中取出一个节点,记录它的值,并将它的左右子节点(如果存在)加入队列。
      • 将当前层的节点值列表 level_nodes 添加到结果列表 result 中。
    • 最后返回包含所有层节点值的结果列表 result。

这种方法可以有效地完成二叉树的层序遍历,并且时间复杂度为 O(n),其中 n 是树中节点的数量,因为每个节点都会被访问一次。空间复杂度主要取决于队列的大小,在最坏的情况下(完全平衡的二叉树),队列中最多会包含 N/2 个节点,因此空间复杂度为 O(n)。

提交结果

在这里插入图片描述

leetcode python 102. 二叉树的层序遍历 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [9,20], [15,7] ] # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # ... 阅读详情

相关推荐

MATLAB 设置legend加标题

x1 = linspace(0,5); y1 = sin(x1/2); plot(x1,y1) hold on x2 = [0 1 2 3 4 5]; y2 = [0.2 0.3 0.6 1 0.7 0.6]; scatter(x2,y2,'filled') hold off legend({'sin(x/2)','2016'},'Location','northwest','Orientation','horizontal')%水平 legend添加标题 lgd = legend; lgd.Fon

早起CaiCai的学习空间 4713

python实现二叉树的遍历(递归/非递归/层序)

遍历二叉树就是以一定的规则将二叉树中的结点排列成一个线性序列,从而得到二叉树节点的各种遍历序列。其实质就是对一个非线性结构进行线性操作,使在这个序列中,除了第一个和最后一个结点,每个结点都有一个直接前驱和直接后继。如果二叉树为空,则什么也不做;否则:1.访问根节点2.先序遍历左子树3.先序遍历右子树如果二叉树为空,则什么也不做;否则:1.中序遍历左子树2.访问根节点3.中序遍历右子树如果二叉树为空,则什么也不做;否则:1.后序遍历左子树2.后序遍历右子树。

liulanba的博客 3万+

SSTI模板注入及绕过姿势(基于Python-Jinja2)

http://xmctf.top:8962/?name={{%22%22[%22\x5f\x5fclass\x5f\x5f%22]["\x5F\x5Fbase\x5F\x5F"]["\x5F\x5Fsubclasses\x5F\x5F"]()[233]["\x5F\x5Finit\x5F\x5F"]["\x5F\x5Fglobals\x5F\x5F"]["\x5F\x5Fbuiltins\x5F\x5F"]['eval']("\x5F\x5Fimport\x5F\x5F('os'))")}}

Y4tacker的博客 1万+

二叉树的层序遍历(Python语言)

二叉树的层序遍历(Python语言) 参考 https://blog.csdn.net/m0_37925202/article/details/80796010 实现 在参考的博客中,采用栈的数据结构来实现对二叉树的层序遍历。但是,我在实现的时候,对于例子: 先序遍历:A → B → D → C 中序遍历:B → D → A → C 后续遍历:D → B → C → A 层序遍历:A → B → C → D 二叉树的结构: 根据博主的方法,最终实现的层序遍历的结果是 A → C → B →

attitude36的博客 3213

深入解析ffmpeg编码错误:avcodec_send_frame()返回-22的排查与修复

本文深入解析FFmpeg编码中avcodec_send_frame()返回-22(AVERROR(EINVAL))错误的根本原因与系统排查方法。核心问题通常在于编码器未正确打开或上下文传递错误。文章提供了从检查编码器查找、确认avcodec_open2()调用,到验证上下文传递的完整修复指南,并附有可运行的代码示例,帮助开发者快速定位并解决这一常见编码障碍。

weixin_28049429的博客 390

相控阵雷达仿真入门:TWS与TAS模式实战解析(附代码示例)

本文深入解析相控阵雷达仿真中的TWS(边搜索边跟踪)与TAS(搜索加跟踪)模式,提供实战代码示例和优化策略。通过简化模型设计和对象化建模,帮助开发者快速构建高效仿真系统,适用于军事推演和装备评估。文章涵盖核心逻辑、数据结构设计及性能优化技巧,提升仿真效率与准确性。

weixin_30687051的博客 453

二叉树的层序遍历Python解法

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 例: 输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 解析: 运用队列的思想。每次大循环就是一层,每从队列中出队一个数就将他的子节点加入队列,每一层便利玩就将便利的值加入结果中。 # Definition for a binary tree node. # class TreeNode(object): # def _

皮_客的博客 5283

告别盲打:为NXOpen Python API生成智能代码提示的完整指南

本文提供了一份为NXOpen Python API生成智能代码提示的完整指南。通过配置匹配的Python环境、利用类型存根文件生成工具创建.pyi文件,并在PyCharm或VSCode中正确配置,开发者可以彻底告别“盲打”,获得精准的代码补全和参数提示,从而大幅提升NX二次开发的效率和体验。

weixin_29057695的博客 371

二叉树遍历(Python)

文章目录遍历二叉树#0 GitHub#1 环境#2 开始#2.1 层次遍历#1 思路分析#2 代码实现#3 测试#2.2 先序遍历#1 思路#2 代码实现#3 测试#2.3 中序遍历#1 思路#2 代码实现#3 测试#2.4 后序遍历#1 思路#2 代码实现#3 测试 遍历二叉树 #0 GitHub https://github.com/Coxhuang/binary-tree-traversal......

Auto 7224

Linux内核同步原语之队列自旋锁(Queued Spin Lock)深度解析

本文深度解析了Linux内核中的队列自旋锁(Queued Spin Lock)机制。通过对比传统自旋锁的瓶颈,详细阐述了队列自旋锁如何利用紧凑的4字节结构、每CPU节点数组和pending位优化,有效解决多核(SMP)系统中的缓存行乒乓和惊群效应,实现公平、高效的锁等待队列,从而显著提升内核在高并发场景下的可扩展性与性能。

weixin_29205061的博客 303

AI辅助决策支持系统架构设计避坑:5个常见技术选型误区及正确方案

AI辅助决策支持系统(AI-DSS)是指通过人工智能技术(机器学习、自然语言处理、知识图谱等)赋能传统决策支持系统,帮助决策者在复杂业务场景中(如供应链优化、风险控制、医疗诊断、金融投资等)提升决策效率和准确性的系统。与传统BI工具不同,AI-DSS不仅能"展示数据",还能基于数据生成"决策建议"甚至"自动执行决策"。技术选型是AI-DSS架构设计的核心环节,涉及数据处理引擎、模型框架、算力资源、集成接口等关键组件的选择。效果不达标:模型预测精度低、决策建议不可用;成本失控:算力资源浪费、维护成本高企。

AIGC应用创新大全的博客 1382

【二叉树】用python实现二叉树的遍历

二叉树有三种常见的遍历方式: 前序遍历:按照根—>左——>右的递归方式进行遍历 中序遍历:按照左—>根——>右的递归方式进行遍历 后序遍历:按照左—>右——>根的递归方式进行遍历 ...

guofei_fly的博客 1095

信贷模型域——客户管理阶段模型(贷中模型)

本文主要探讨了信贷模型域中的客户管理阶段模型,重点聚焦于交叉销售模型。交叉销售模型不仅应用于贷中阶段,还贯穿于贷前、贷中、贷后全过程,其核心作用在于提升客户价值、增强客户粘性、降低流失率以及实现风险与收益的平衡。文中通过具体案例展示了交叉销售模型在现实业务中的应用,并指出其在贷中阶段的主要任务是提升存量客户价值、增加产品使用率,同时有效控制风险。

庄小焱 1879

LeetCode 102. 二叉树的层序遍历 | Python

使用广度优先搜索,借助队列先入先出的性质,逐层遍历,得到所需求的解,进而解决《102. 二叉树的层序遍历》问题

"大梦三千秋的博客 874

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Leetcode102. 二叉树的层序遍历 Python3

Leetcode102. 二叉树的层序遍历 队列版层序遍历 python3代码: class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: # 首先判空 if root is None: return [] # 初始化队列,添加根节点 que = [root] # 因为结果是二维的,先定义一个

Println30的博客 227

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

LeetCode第102题—二叉树的层序遍历—Python实现

title: LeetCode No.102 categories: OJ LeetCode tags: Programing LeetCode OJ LeetCode第102题—二叉树的层序遍历 自己代码的开源仓库:click here 欢迎Star和Fork ???? 题目描述 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 /

StriveZs'Blog 317

LeetCode 102[Python]. 二叉树的层序遍历 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

LectCode 102. 二叉树的层序遍历 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 Code def levelOrder(self, root: TreeNode) -> List[List[int]]: if root is None: return [] from collections import deque #BFS layer = deque() layer.

vvv__vvv的博客 803

leetcode102. 二叉树的层序遍历python

问题描述: 题解: 此题的基本是对一个二叉树进行层序遍历。 二叉树层序遍历可以通过队列实现:维护一个队列queue(python中通过list实现)和保存遍历结果的list res。 <1>如果根节点root不为空,则加入queue,初始化时queue中只有根节点一个。 <2>取出queue第一个节点记node <3>将node.val加入res <4>如果node左子节点不为空,加入queue。 <5>如果node右子节点不.

ganggang的博客 715

8月6日 力扣练习(Python3):第102题:二叉树的层序遍历

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 题目链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal 参考链接:https://blog.csdn.net/qq_20011607/article/details/89142173(方法三) 方法一:迭代 编程实现要点: 建立临时栈:queue(维护从上到下层序的遍历)[3,9,20,15,7] 建立输出数组:res

qq_41978942的博客 257

4-5 LC102 107 二叉树的层序遍历I II C++ python力扣刷题笔记

文章目录LC102 二叉树的层序遍历1.读题2.思路3.C++代码4.python代码LC107 二叉树的层序遍历II1.读题2.思路3.C++代码4.python代码 LC102 二叉树的层序遍历 LC102 1.读题 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 2.思路 和剑指32 II 相同的题 当然也是相同的思路~ 3.C++代码 跟剑指Offer32 II一模一样滴 又敲了一遍 class Solution { public: vo

一碗菜粥的博客 382

力扣:(102)二叉树的层序遍历(Python)

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

2503_91125378的博客 298

102. 二叉树的层序遍历(python)

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def levelOrder(self, root

jhsignal的博客 2824

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

给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)。输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]输入:root = [] 输出:[]

qq_43069203的博客 516

102. 二叉树的层序遍历 Python

本题解采用while循环遍历二叉树,用cur数组来存储当前层的所有结点,每次遍历结束后添加当前层的结点值到result中,然后更新cur数组,代表下一层需要遍历的结点有什么(用next数组存储),当cur中没有元素时则代表遍历到二叉树最底层,遍历结束,返回result即可。本题考察二叉树的层序遍历,且需要按照每层的结点值返回结果数组。(即逐层地,从左到右访问所有节点)。

小明 580

102 - 二叉树的层序遍历 - python

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [9,20], [15,7] ] 二叉树的层序遍历,其中每一层都是从左往右输出。使用数组存放每一层访问后根节点的子...

Forlogenの解忧杂货铺 797

102. 二叉树的层序遍历 python

BFS模板: deque的结构来模拟队列 队列里肯定有一个初始点 每次从队列出队一个元素并处理 对元素进行扩张(具体要看怎么扩张) 满足条件的扩张的点进队列 循环处理deque中的元素,直到为空 注意: 辨识某题是 BFS : 是否可衍生出递归状态树,可用dfs,bfs 从哪些点开始扩张 class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if not root:

annaya的博客 261
上一篇: 101.对称二叉树 python
下一篇: 103.二叉树的锯齿形层序遍历 python
gxls2024
博客等级 码龄9年 1079粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gxls2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值