103.二叉树的锯齿形层序遍历 python

九章算法 | 微软面试题:二叉树的锯齿形层次遍历 给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) 在线评测地址:LintCode 领扣样例 1:输入:{1,2,3} 输出:[[1],[3,2]] 解释: 1 / \ 2 3 它将被序列化为 {1,2,3}样例 2:输入:{3,9,20,#,#,15,7} 输出:[[3],[20,9],[15,7]] 解释: 3 ... 阅读详情

题目

题目描述

给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

示例 1:

在这里插入图片描述

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

示例 2:

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

示例 3:

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

提示:

树中节点数目在范围 [0, 2000] 内
-100 <= Node.val <= 100

题解

为了实现二叉树的锯齿形层序遍历,我们可以使用广度优先搜索(BFS)的方法。具体来说,我们可以通过一个队列来逐层访问节点,并根据当前层次决定是从左到右还是从右到左添加节点值。下面是一个Python实现的例子:

def zigzagLevelOrder(root):
    if not root:
        return []

    results = []
    queue = deque([root])
    left_to_right = True

    while queue:
        level_size = len(queue)
        level_nodes = deque()

        for _ in range(level_size):
            node = queue.popleft()
            
            # 根据当前层次的方向决定如何添加节点值
            if left_to_right:
                level_nodes.append(node.val)
            else:
                level_nodes.appendleft(node.val)

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

        results.append(list(level_nodes))
        # 改变下一层的方向
        left_to_right = not left_to_right

    return results

代码解释:

  1. TreeNode类:用于构造二叉树的节点。
  2. zigzagLevelOrder函数:
    • 首先检查根节点是否为空,若为空则直接返回空列表。
    • 使用deque初始化一个队列并将根节点加入队列中,准备进行BFS。
    • 使用left_to_right布尔变量来跟踪当前层是应该从左向右还是从右向左处理。
    • 对于每一层,计算该层的节点数量level_size,并创建一个新的deque对象level_nodes用于存储当前层的节点值。
    • 在遍历当前层的所有节点时,如果left_to_right为真,则将节点值添加到level_nodes的末尾;否则添加到开头。
    • 最后,改变left_to_right的值以确保下一层按照相反的顺序处理,并将当前层的结果添加到最终结果列表results中。

此方法的时间复杂度为O(n),其中n是树中节点的数量,因为每个节点都会被访问一次。空间复杂度也是O(n),因为在最坏情况下队列中可能会包含所有节点。

提交结果

在这里插入图片描述

【Dumper-7】入门指南 - 带你领略不一样的UE世界 摘要: Dumper-7是一款用于分析UE4/UE5游戏的逆向工具,可自动生成游戏内部结构的C++ SDK。支持Visual Studio、CMake和Xmake三种构建方式,通过DLL注入目标游戏后,自动识别引擎结构并输出C++ SDK文件(默认保存在C:\Dumper-7目录)。该工具适用于游戏Mod开发、安全研究和机制分析,提供完整的类层次映射、属性/函数识别功能。使用时需注意x64平台配置,生成SDK后可集成到自定义DLL项目中,通过示例代码展示如何查找游戏对象、访问世界状态和调用引擎函数。 阅读详情

相关推荐

小米万兆路由器里的Docker安装可道云(Kodexplorer)私有网盘

小米2022年12月份发布了万兆路由器,里面可以使用Docker。 今天尝试在小米的万兆路由器里安装[可道云](http://kodcloud.com/)(Kodexplorer)私有网盘。

engchina的专栏 1万+

leetcode:103. 二叉树的锯齿形层序遍历

题目来源 leetcode 题目描述 struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode(int x, TreeNode *left, TreeN

OceanStar的博客 332

一觉醒后ChatGPT 被淘汰了

近日,AI 界貌似出现了一种新的趋势:自主人工智能。这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归 OpenAI 的 Andrej Karpathy 也为其大力宣传,并在推特赞扬:「AutoGPT 是 prompt 工程的下一个前沿。」

Rocky006的博客 13万+

【AC笔记】0103.二叉树的锯齿形层序遍历

题目要求 返回其节点值的锯齿形层序遍历(也就是,如果第一层遍历顺序时从左到右,第二次遍历顺序就要从右到左,依次类推) 图解示例 算法思想 方法一:使用广度优先搜索 + 调整结果 本题比较简单的办法就是先使用广度优先搜索,即遍历到哪一层,都按从左到右的顺序放入列表中 完成遍历后,对偶数层(即下标为单数的 ans[i])的遍历结果,倒转顺序 方法二:使用栈+列表 通过分析示例,我们发现,偶数层的遍历顺序与输出顺序刚好相反,即本来先遍历到的数据,后出现在列表中 使用栈(先进后出)的方式存储偶数层节点数

为了远大的理想,冲锋! 553

扫地机的CPU只要二十多块?2024第二拆来了

昨天还说到这个机器人的故障,经小鱼拆机后测试和后台网友留言确认,不是防跌落问题,是轮子故障,这个轮子不会动,轮子上有一个限位开关检测机器人是否离开地面的,测试的时候也没有误触发,所以电机存在故障,后面拆电机的时候再检查。最后再留下一个疑问,这个机器人的回充没有用红外管,机器人是如何识别基站进行返回充电的(因为只买了本体,没买充电桩,不确定充电桩的形状,是不是利用点云识别不确定)懂的请留言。全志的R16,封装是 BGA282,那这个板子至少是4层板,小鱼盲猜 6 层板,知道的小伙伴欢迎留言。

生活不止眼前的苟且 1978

实战指南:在摩尔线程GPU上部署AI模型的完整流程

本文提供了一份详尽的实战指南,手把手教你如何在摩尔线程GPU上成功部署AI模型。内容涵盖从驱动安装、Docker环境配置,到核心的代码适配与模型运行全流程,并分享了性能调优技巧与常见避坑方法,旨在帮助开发者高效利用国产硬件进行AI应用开发。

weixin_29271263的博客 541

数据结构与算法-11.二叉树的锯齿形层序遍历

11、二叉树的锯齿形层序遍历 题目 给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 例如: 给定二叉树 [3,9,20,null,null,15,7], ​ 3 / \ 9 20 / \ / \ nn 15 7 返回锯齿形层序遍历如下: [ [3], [20,9], [15,7] ] 11.0、一般解法 正常的层序遍历,然后如果是偶数层的话就反转一下数组,非暴力不合作。 vector<vector<

h1429541165的博客 330

HAL库移植实战:解决‘HAL_StatusTypeDef‘未定义报错的3个关键步骤

本文针对STM32开发中从标准库向HAL库移植时常见的'HAL_StatusTypeDef'未定义报错,提供了三个关键解决步骤:首先确保正确包含头文件入口,其次检查并配置模块使能宏,最后注意避免与标准库的同名结构体混用。文章通过实战案例解析了HAL库的模块化设计理念,帮助开发者高效解决混合编程中的编译问题。

book8的博客 207

leetcode#103. 二叉树的锯齿形层次遍历

题目链接 题目描述: 给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 实例: 例如: 给定二叉树 [3,9,20,null,null,15,7] 返回锯齿形层次遍历如下: [ [3], [20,9], [15,7] ] 解题思路   本题要求在常规的队列+BFS基础上进行“之字形”遍历。说明我们要对BFS的过程做出一些...

面包猎人 257

Cadence Allegro 17.4 保姆级教程:PCB位号重排与反标回原理图完整避坑指南

本文详细解析了Cadence Allegro 17.4中PCB位号重排与反标回原理图的全流程,包括安全工程准备、智能重排策略和反标黄金法则。特别针对芯片封装协同设计(Co-Design)场景,提供可追溯的版本管理和故障恢复方案,帮助工程师避免常见位号陷阱,确保设计文件一致性。

weixin_30613433的博客 438

AI技术在电商中的实际应用

人工智能、电商、推荐系统、个性化、机器学习、深度学习 1. 背景介绍 电子商务行业近年来发展迅速,用户数量不断增长,商品种类日益丰富。然而,随着市场竞争的加剧,电商平台面临着如何提升用户体验、提高转化率、挖掘潜在商机等一系列挑战。人工智能(AI)技术作为一种新兴技术,凭借其强大的数

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1740

Leetcode 103. 二叉树的锯齿形层序遍历 (Java+Python3实现 超详细注释!)

Leetcode 103. 二叉树的锯齿形层序遍历 之前写过Python版本的层序遍历,这道题只是加了一个锯齿形遍历,基本思路是一致的,Java和Python都实现了一遍,Python没加注释,详细的注释可以看之前写的那道题。Java版加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正! Java实现: class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root)

Println30的博客 235

Android 13.0 展讯平台关机充电动画横屏显示修改

在13.0的系统rom定制化开发中,在关于展讯平台的产品中,系统默认的充电动画是竖屏显示的,但是在像平板的产品中竖屏动画肯定不符合规范, 所以需要在平板TV产品中,充电动画同时也是需要修改为横屏显示的,接下来就来分析下充电动画的相关绘制流程,然后实现功能

安卓兼职framework和app工程师的博客 409

4-6 LC103二叉树的锯齿形层序遍历 C++ python力扣刷题笔记

LC103 二叉树的锯齿形层序遍历 LC103 1.读题 给定一个二叉树,返回其节点值的锯齿形层序遍历。 先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行 2.思路 一看题 啊又是熟悉的层序遍历 变了个花样又拿来考我[doge] 那么我们继续修改广度优先搜索 对二叉树进行逐层遍历 另外 我们使用双端队列 collections.deque() 维护当前层的所有元素 对每层节点的进入队列时的存储 我们维护一个变量isOrderLeft来记录是从左到右插入/从右到左插入 从左到右插入

一碗菜粥的博客 502

STM32F407中文手册

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LeetCode 103. 二叉树的锯齿形层序遍历 | Python

思路:广度优先搜索

"大梦三千秋的博客 445

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LeetCode第103题—二叉树的锯齿形层序遍历—Python实现

title: LeetCode No.103 categories: OJ LeetCode tags: Programing LeetCode OJ LeetCode第103题—二叉树的锯齿形层序遍历 自己代码的开源仓库:click here 欢迎Star和Fork ???? 题目描述 给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 例如: 给定二叉树 [3,9,20,null,null,15,7], 3

StriveZs'Blog 328

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

103. 二叉树的锯齿形层序遍历 Python

开始的时候是从左往右的顺序进行遍历,然后下一层变成从右往左,然后再下一层又变成从左往右…每次需要从右往左遍历时,只需要将当前遍历数组逆序即可,这里采用。的一个加深,其基本原理还是通过二叉树的层序遍历,唯一的不同是需要区分当前层是从左往右的顺序还是从右往左的顺序,对应存储数组。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。所以本题解只需要对每层的元素判断其输入方向即可,这里用。表示从左往右读取(即。表示从右往左读取(即。

小明 436

LeetCode-103. 二叉树的锯齿形层序遍历(python3.7)

先插入几句题外话 [:]和[::]的区别是? 首先是 b = a[i:j] 表示复制a[i]到a[j-1],以生成新的list对象,其中i\j缺省时分别默认为0\len(b) d=a[:-1] #从位置0到位置-1之前的数 print(d) #pytho e=a[:-2] #从位置0到位置-2之前的数 print(e) #pyth 其次是 b = a[i:j:s] 表示i,j与下面的一样,s表示步进值,缺省为1. a='python' b=a[::-1] print(b) #nohtyp

Anq1_的博客 287

【Leetcode刷题Python】103. 二叉树的锯齿形层序遍历

给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。示例 1:示例 2:示例 3:为了满足题目要求的返回值为「先从左往右,再从右往左」交替输出的锯齿形,我们可以利用「双端队列」的数据结构来维护当前层节点值输出的顺序。双端队列是一个可以在队列任意一端插入元素的队列。在广度优先搜索遍历当前层节点拓展下一层节点的时候我们仍然从左往右按顺序拓展,但是对当前层节点的存储我们维护一个变量 flag记录是从左至右还是从右至左的:如果从

BetterBench的博客 655

103. 二叉树的锯齿形层序遍历 (Python 实现)

题目: 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:[[3],[20,9],[15,7]] 示例 2: 输入:root = [1] 输出:[[1]] 示例 3: 输入:root = [] 输出:[] 代码: # Definition for a binary tree node. # class TreeNo

d_l_w_d_l_w的博客 271

力扣:(103)二叉树的锯齿形层序遍历(Python)

给你二叉树的根节点root,返回其节点值的。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

2503_91125378的博客 386

力扣:103. 二叉树的锯齿形层序遍历(Python3)

力扣:103. 二叉树的锯齿形层序遍历(Python3)

欢迎光临 340

103. 二叉树的锯齿形层序遍历(广度优先搜索)(傻瓜教程)(python)(LC)

103. 二叉树的锯齿形层序遍历 题目描述: 给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回锯齿形层序遍历如下: [ [3], [20,9], [15,7] ] 解题 一、分析题目——广度优先搜素的变体 题目本质上就是考察广度优先搜素,只不过在其中加入了“锯齿形遍

qq_51174011的博客 235

leetcode | python | 第103题 | 二叉树的锯齿形层序遍历

【代码】leetcode | python | 第103题 | 二叉树的锯齿形层序遍历。

iCling的博客 201

Python | Leetcode Python题解之第103题二叉树的锯齿形层序遍历

Python | Leetcode Python题解之第103题二叉树的锯齿形层序遍历

Mopes__的博客 549

力扣(leetcode)103. 二叉树的锯齿形层序遍历 C++

leetcode算法思路讲解,C++二叉树,队列

m0_63269710的博客 408
上一篇: 102.二叉树的层序遍历 python
下一篇: 104.二叉树的最大深度 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、付费专栏及课程。

余额充值