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

这道题要求在普通层序遍历的基础上,加上一点"小花样":每一层的遍历方向要左右交替,因此也叫"之字形 / 锯齿形层序遍历"。

题目描述

给定一棵二叉树的根节点 root,返回其节点值的锯齿形层序遍历结果。

具体要求是:第一层从左到右,第二层从右到左,第三层再从左到右,如此交替进行。

示例 1:root = 3,9,20,null,null,15,7,输出 \[3,20,9,15,7]。

示例 2:root = 1,输出 \[1]。leetcode

示例 3:root = \[\],输出 \[\]。leetcode

约束条件:

  • 节点数量在 0,2000 范围内。
  • 每个节点的取值范围为 -100,100

思路分析

这道题的核心仍然是层序遍历 = BFS + 队列,只是在收集每一层结果时,需要根据当前层数的奇偶决定插入方向。

常见有两种写法,你的代码大概率是落在这两类之一:

写法一:正常按从左到右收集一层,然后在偶数层对当前层的数组做一次 reverse(时间稍差一点,但实现非常直观)。

写法二:不做 reverse,而是根据层数奇偶决定往当前层数组的尾部 push 还是头部 insert/unshift,一次遍历就得到目标顺序(时间、空间都比较漂亮)。

整体流程可以概括为:

  1. 如果根节点为空,直接返回空数组。
  2. 使用队列进行 BFS,把根节点入队。
  3. 维护一个布尔变量或层计数,用来表示当前层是"从左到右"还是"从右到左"。
  4. 对队列中当前层的所有节点:
    • 依次弹出节点,加入当前层数组;
    • 把它的左右孩子(如果存在)入队。
  5. 将当前层数组按方向处理后加入结果,并翻转方向标记,进入下一层。

与普通层序遍历的对比

特性 普通层序遍历(102)csdn 锯齿形层序遍历(103)
遍历顺序 每层都从左到右 奇数层左到右,偶数层右到左交替
使用的数据结构 队列(BFS)programmercarl 队列 + 方向标记 / 双端结构
结果处理 直接按访问顺序加入 需要按层数奇偶翻转或前插

可以看到,本题本质还是层序遍历,只是多了一个"按层控制方向"的逻辑,相当于在模板题 102 的基础上稍作改动。

代码实现(替换成你的提交)

这一节请粘贴你在 LeetCode 上通过的代码,并简单标注关键步骤,比如:

  • 如何维护队列;
  • 如何判断当前层数奇偶;
  • 在什么位置决定是 push 还是"从头插入 / reverse"。

示例结构(伪代码示意,仅用于说明结构,不要照抄源码):

text 复制代码
// 在这里粘贴你的代码

// 关键逻辑说明:
// 1. 使用 queue 做 BFS
// 2. 用 level / flag 控制方向
// 3. 根据方向决定插入顺序(或最后 reverse)

复杂度分析

  • 时间复杂度:每个节点仅进队、出队一次,除此只是少量数组操作,整体为 O(n)。
  • 空间复杂度:队列在最宽的一层时最多容纳 O(n) 个节点,结果数组也为 O(n),整体为 O(n)。

小结与扩展

掌握本题之后,可以一并复习 102(普通层序遍历)和 107(自底向上的层序遍历),三题的写法高度相似,只是"结果如何组织"不同。

实战中,看到"按层""从上到下/从左到右/交替方向"这类关键词时,优先考虑 BFS + 队列,再在结果数组上做文章即可。

https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/

相关推荐
江畔柳前堤6 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Forever Nore8 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
罗西的思考9 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX10 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面10 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号11 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽11 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI11 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
地平线开发者13 小时前
征程6工具链模型X86推理方式说明
算法
地平线开发者13 小时前
【征程6】校准量化中HistogramObserver解析
算法