news 2026/5/1 6:10:43

day150—数组—二叉树的锯齿形层序遍历(LeetCode-103)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
day150—数组—二叉树的锯齿形层序遍历(LeetCode-103)

题目描述

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

解决方案:

这段代码的核心功能是实现二叉树的锯齿形层序遍历(之字形遍历)(即第一层从左到右,第二层从右到左,第三层再从左到右,以此类推交替遍历),在普通层序遍历的基础上增加了 “偶数层反转结果” 的逻辑,时间复杂度O(n)n为节点数),空间复杂度O(n),是该问题的经典迭代解法。

核心逻辑

代码在普通层序遍历(双数组模拟 BFS)的基础上,通过一个布尔标记控制 “是否反转当前层节点值数组”,实现锯齿形效果:

  1. 边界处理:若根节点为空,直接返回空数组;
  2. 初始化容器与标记
    • 保留普通层序遍历的ans(最终结果)、cur(当前层节点)、nxt(下一层节点)、value(当前层节点值);
    • 新增布尔变量even(初始为false),标记当前层是否为 “需要反转的偶数层”(第一层不反转,第二层反转,以此类推);
  3. 逐层遍历循环
    • 与普通层序遍历一致:遍历当前层节点,收集值到value,并按左→右顺序收集下一层节点到nxt
    • 核心新增逻辑:若eventrue(当前是偶数层),调用reverse反转value数组,实现从右到左的遍历效果;
    • 将处理后的value加入ans,更新cur为下一层节点,并翻转even的值(切换下一层的遍历方向);
  4. 返回结果:遍历完成后,ans中按锯齿形存储了各层节点值,直接返回即可。

总结

  1. 核心思路:在普通层序遍历的基础上,通过布尔标记 + 数组反转实现锯齿形,无需改变节点遍历顺序,仅调整结果数组的顺序,逻辑简洁;
  2. 关键细节:even初始为false(第一层不反转),每遍历完一层就翻转even,保证奇偶层交替反转;
  3. 效率特点:整体时间O(n)(反转操作的总时间为O(n),所有节点仅遍历一次),空间开销与普通层序遍历一致,是最优解法之一。

函数源码:

/** * Definition for a binary tree node. * 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, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { if(!root) return {}; vector<vector<int>>ans={}; vector<TreeNode*>cur={root}; vector<TreeNode*>nxt={}; vector<int>value={}; bool even=false; while(!cur.empty()){ value={}; nxt={}; for(auto i:cur){ value.push_back(i->val); if(i->left) nxt.push_back(i->left); if(i->right)nxt.push_back(i->right); } if(even) reverse(value.begin(),value.end()); ans.push_back(value); cur=nxt; even=!even; } return ans; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 14:30:48

fft npainting lama复杂背景去物:上下文填充效果评测

fft npainting lama复杂背景去物&#xff1a;上下文填充效果评测 1. 引言 1.1 图像修复技术的发展背景 随着深度学习在计算机视觉领域的深入应用&#xff0c;图像修复&#xff08;Image Inpainting&#xff09;技术取得了显著进展。传统方法依赖于纹理合成或扩散算法&#x…

作者头像 李华
网站建设 2026/4/23 16:27:58

边缘计算场景应用:IndexTTS-2-LLM轻量级部署实战案例

边缘计算场景应用&#xff1a;IndexTTS-2-LLM轻量级部署实战案例 1. 引言 随着边缘计算与终端智能的快速发展&#xff0c;语音合成技术&#xff08;Text-to-Speech, TTS&#xff09;正逐步从云端向本地化、低延迟、轻量化部署演进。在物联网设备、智能客服终端、车载系统等资…

作者头像 李华
网站建设 2026/4/27 5:38:04

开源大模型部署趋势一文详解:DeepSeek-R1-Distill-Qwen-1.5B弹性GPU实践

开源大模型部署趋势一文详解&#xff1a;DeepSeek-R1-Distill-Qwen-1.5B弹性GPU实践 1. 引言 1.1 大模型轻量化部署的行业背景 随着大语言模型在自然语言理解、代码生成和数学推理等任务中的广泛应用&#xff0c;如何高效部署中等规模但高性能的模型成为工程落地的关键挑战。…

作者头像 李华
网站建设 2026/4/24 19:13:28

中文NLP避坑指南:用bert-base-chinese轻松解决语义理解难题

中文NLP避坑指南&#xff1a;用bert-base-chinese轻松解决语义理解难题 1. 引言&#xff1a;中文语义理解的挑战与破局之道 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;中文因其独特的语言结构和丰富的语义表达&#xff0c;长期被视为机器理解的难点。与英文…

作者头像 李华
网站建设 2026/4/18 0:05:29

无需画框!SAM3大模型镜像支持文本输入实现图像精准分割

无需画框&#xff01;SAM3大模型镜像支持文本输入实现图像精准分割 1. 技术背景与核心价值 在计算机视觉领域&#xff0c;图像分割是一项基础且关键的任务。传统方法通常依赖于大量标注数据进行监督学习&#xff0c;难以泛化到未见过的物体类别。近年来&#xff0c;随着“提示…

作者头像 李华
网站建设 2026/4/26 10:12:26

DeepSeek-R1-Distill-Qwen-1.5B对比Yi-1.5B:轻量模型推理精度评测

DeepSeek-R1-Distill-Qwen-1.5B对比Yi-1.5B&#xff1a;轻量模型推理精度评测 1. 轻量级大模型选型背景与评测目标 随着边缘计算和本地化AI应用的兴起&#xff0c;如何在有限硬件资源下实现高效、精准的推理能力成为开发者关注的核心问题。尤其在嵌入式设备、移动终端和低显存…

作者头像 李华