二叉树的锯齿形层序遍历
最近又开始写小算法题了哈哈。大部分也是以前做过的普通而常见的题目。因为好像进入了低谷,做什么事都没有动力了,先写写这些好写的小算法题吧。
给你二叉树的根节点 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了