二叉树的锯齿形层序遍历

  最近又开始写小算法题了哈哈。大部分也是以前做过的普通而常见的题目。因为好像进入了低谷,做什么事都没有动力了,先写写这些好写的小算法题吧。

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

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

示例 1:

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

示例 2:

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

示例 3:

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

思路:

  这道题我们依然可以用原来的层序遍历实现来完成。只需要隔层改变一下存放的顺序就好了。我们使用一个变量来记录层数,然后判断奇偶性,按题目的要求,其中一种倒着放即可。

简单的,直接看代码吧~

代码:

class Solution(object):

    def zigzagLevelOrder(self, root):

        if not root:#定义特殊情况

            return []

        q=[]#用q列表进行每一层的暂存

        q.append(root)#一开始先把第一层放入q

        res = []存放结果的总大列表

        ceng = 1#额外变量记录这是第几层

        while q:

            res1 = []#存放每一层结果的小列表

            lenth = len(q)#拿到每一层有多少个元素 用做下面做全部弹出

            for _ in range(lenth):

                node = q.pop(0)#逐一弹出这一层的元素

                res1.append(node.val)#放到小列表中

                if node.right:#弹出元素如果有子节点 就继续加入q队列被当做下一层

                    q.append(node.right)

                if node.left:

                    q.append(node.left)

            if ceng%2==1:#判断这一层是奇数层还是偶数层,从而决定放正序还是逆序

                res1=res1[::-1]

            ceng+=1#层数+1

            res.append(res1)#每结束一层,将小列表添加到大列表中

        return res
posted @   JunanP  阅读(5)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示