首页 > 编程语言 >[Python手撕]二叉树的锯齿形层序遍历

[Python手撕]二叉树的锯齿形层序遍历

时间:2024-11-27 11:23:46浏览次数:6  
标签:right val Python 层序 queue 二叉树 nextSize root left

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

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

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:

        if not root:
            return []

        queue = [root]
        curLevel = 1
        curSize = 1
        nextSize = 0
        res = []

        while queue:
            level = []
            if curLevel % 2 == 1:
                for _ in range(curSize):
                    t = queue.pop(0)
                    level.append(t.val)
                    if t.left:
                        queue.append(t.left)
                        nextSize += 1
                    if t.right:
                        queue.append(t.right)
                        nextSize+=1
            if curLevel % 2 == 0:
                for _ in range(curSize):
                    t = queue.pop(-1)
                    level.append(t.val)
                    if t.right:
                        queue.insert(0,t.right)
                        nextSize+=1
                    if t.left:
                        queue.insert(0,t.left)
                        nextSize += 1


            curLevel += 1
            curSize = nextSize
            nextSize = 0
            res.append(level)

        return res
        

标签:right,val,Python,层序,queue,二叉树,nextSize,root,left
From: https://www.cnblogs.com/DCFV/p/18572023

相关文章

  • [Python手撕]岛屿的最大面积
    LCR105.岛屿的最大面积给定一个由0和1组成的非空二维数组grid,用来表示海洋岛屿地图。一个岛屿是由一些相邻的1(代表土地)构成的组合,这里的「相邻」要求两个1必须在水平或者竖直方向上相邻。你可以假设grid的四个边缘都被0(代表水)包围着。找到给定的二维数组中......
  • python 接口自动化面试宝典
    python接口基础语法(一)python中的tuplelistsetdict在测试中的应用1.Tuple(元组):元组是不可变的序列,这使得它非常适合在测试中表示固定的、不会改变的数据集2.List(列表):列表是可以修改的序列,因此它是进行各种算法和数据操作的好工具3.Set(集合):集合是无序且不重复元素的......
  • python中urllib库和requests库的选择
    python中urllib和requests是两个最常用的库。它们都能够发送HTTP请求,但在使用方式、功能和效率上存在一些差异。一、urllib库urllib是Python标准库中的一个模块,用于发送HTTP请求。它提供了一个简单的接口来发送GET、POST等请求,并获取响应。urllib提供了一些基本的HTTP请求方......
  • 大数据学习记录,Python基础(1)
    修改pip源由于直接从python服务器下载各种插件速度较慢,我们可以通过修改下载地址的方法提高下载速度修改pip源找到系统盘下C:\Users\用户名\AppData\Roaming,APPData可能是隐藏文件,需要将隐藏关闭;查看在Roaming文件夹下有没有一个pip文件夹,如果没有创建一个;进入pip文件夹,创建一......
  • python-enumerate枚举
    对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值enumerate多用于在for循环中得到计数 语法以下是enumerate()方法的语法:enumerate(sequence,[start=0])sequence--一个序列、迭代器或其他支持迭......
  • Python dlib下载
    1下载dlib前的准备工作1.1Python3我是以前下的1.2然后是Python官网推荐的包管理Guides-PythonPackagingUserGuide1.2.1pippip我以前也下过了(好像还换了源)没下的话,官网给了下载方式。下面是Windows系统的:py-mensurepip--default-pip1.2.2更新pip,se......
  • 【数据可视化入门】Python散点图全攻略:Matplotlib、Seaborn、Pyecharts实战代码大公开
    数据可视化入门-系列文章目录Python散点图全攻略:Matplotlib、Seaborn、Pyecharts实战代码大公开!文章目录数据可视化入门-系列文章目录Python散点图全攻略:Matplotlib、Seaborn、Pyecharts实战代码大公开!前言1.Matplotlib:基础绘图库2.Seaborn:基于Matplotlib的高级绘......
  • 量化交易Python代码:如何轻松下载可转债基本信息
    哈喽,大家好,我是木头左!可转债作为一种兼具债券和股票特性的投资工具,一直备受投资者的关注。今天,我将向大家介绍一种简单而有效的方法,通过Python代码来下载可转债的基本信息。为什么要另外下载可转债基本信息?虽然XtQuant.XtData行情模块get_cb_info(stockcode)可以获取......
  • 【最新原创毕设】基于Java的面向中职物联网专业教师的课程资源服务平台(免费领源码)可做
    目录摘要1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4添加信息流程2.2.5修改信息流程2.2.6删除信息流程2.3 系统......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
    摘 要随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络的发达,果园信息统计管理系统的信息通过网络进行信息管理掀起了热潮,所以针对果园信......