news 2026/9/24 17:54:12

DeepSeek LeetCode 103. 二叉树的锯齿形层序遍历 Golang实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek LeetCode 103. 二叉树的锯齿形层序遍历 Golang实现

LeetCode 103. 二叉树的锯齿形层序遍历 Golang 实现

思路

与普通层序遍历一致,用队列逐层处理。区别在于需要交替改变每层的填充方向:

· 维护布尔变量 leftToRight 表示当前层方向。
· 每层预分配 level := make([]int, size):
· 从左到右:level[i] = node.Val
· 从右到左:level[size-1-i] = node.Val
· 子节点始终按 左 → 右 顺序入队,保证下一层在队列中从左到右排列。
· 每层结束后切换方向。

Golang 代码

packagemain// Definition for a binary tree node.typeTreeNodestruct{ValintLeft*TreeNode Right*TreeNode}funczigzagLevelOrder(root*TreeNode)[][]int{varres[][]intifroot==nil{returnres}queue:=[]*TreeNode{root}head:=0// 队头索引,避免频繁切片leftToRight:=trueforhead<len(queue){size:=len(queue)-head// 当前层节点数level:=make([]int,size)fori:=0;i<size;i++{node:=queue[head]head++// 根据方向决定填充位置ifleftToRight{level[i]=node.Val}else{level[size-1-i]=node.Val}// 子节点始终按从左到右入队ifnode.Left!=nil{queue=append(queue,node.Left)}ifnode.Right!=nil{queue=append(queue,node.Right)}}res=append(res,level)leftToRight=!leftToRight// 切换方向}returnres}

复杂度分析

指标 复杂度 说明
时间 O(n) 每个节点恰好入队、出队一次,填充 level 为 O(1)
空间 O(n) 队列最多存一层的节点,最坏约 n/2;结果集存储所有节点值

关键点说明

  1. 用 head 索引代替 queue = queue[1:]:避免频繁切片带来的额外开销,同时减少底层数组的内存保留问题。
  2. 固定子节点入队顺序:无论当前层方向如何,都先 Left 后 Right 入队,保证下一层在队列中始终是从左到右排列。
  3. 方向交替:每层结束后 leftToRight = !leftToRight,实现锯齿效果。
  4. 空树处理:root == nil 时直接返回空切片。

替代写法(先收集再反转)

如果不想用索引定位,也可以正常追加后再按需反转:

forhead<len(queue){size:=len(queue)-head level:=make([]int,0,size)fori:=0;i<size;i++{node:=queue[head]head++level=append(level,node.Val)ifnode.Left!=nil{queue=append(queue,node.Left)}ifnode.Right!=nil{queue=append(queue,node.Right)}}if!leftToRight{forl,r:=0,len(level)-1;l<r;l,r=l+1,r-1{level[l],level[r]=level[r],level[l]}}res=append(res,level)leftToRight=!leftToRight}

两种写法时间复杂度均为 O(n),可根据偏好选择。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 17:54:00

系统分析师之信息化基础知识

知识点&#xff1a;信息工程方法信息工程是面向企业计算机信息系统建设&#xff0c;以数据为中心的开发方法。信息工程方法认为&#xff0c;与企业的信息系统密切相关的三要素是企业的各种信息、企业的业务过程和企业采用的信息技术。信息工程自上而下地将整个信息系统的开发过…

作者头像 李华
网站建设 2026/9/24 17:52:37

TCP协议栈管理、文件符表映射机制与TCP资源关闭流程介绍

文章目录 一、进程与内核 1.用户态的Java程序进程 2.内核态的操作系统内核 2.1操作系统 2.1.1内核 二、文件描述符与表引用 1.文件描述符 2.文件描述符表 3.引用比例 三、TCP资源管理与连接维护 1.TCP协议栈 1.1TCB 1.1.1端点 1.1.1.1TCP连接状态 四、Socket引用…

作者头像 李华
网站建设 2026/9/24 17:51:44

【n8n】AI驱动的短视频全自动生成应用

短视频内容的生产速度和创意质量已成为社交平台竞争的核心。借助AI与自动化技术,短视频的生成方式正从依赖人工转向全流程自动化生产模式。 该工作流以AI模型与自动化节点协作实现从创意到成品的短视频生成,涵盖文案构思、画面渲染、视频合成及语音配音等环节,适合批量化、…

作者头像 李华
网站建设 2026/9/24 17:50:39

【C#桌面客户端系列学习-1】打包exe,并根据版本号实现自动更新

目录 一、前言 二、主要用到的技术 1、AutoUpdater.NET 2、Fody.Costura 三、安装相关程序包 1、安装Autoupdater.NET.Official 2、安装Fody.Costura 四、配置版本号 五、准备更新用的XML文件 六、代码中调用 七、制作并上传更新包 八、测试是否成功 九、注意事项 …

作者头像 李华
网站建设 2026/9/24 17:50:04

浚县装修主材下单时点怎么反推?一张倒排表把采购和工序对齐

装修拖期比较隐蔽的一类原因&#xff0c;不是工人磨洋工&#xff0c;是材料没到。工序在前、材料在后&#xff0c;谁都救不回来——瓦工进场了砖还在路上&#xff0c;师傅只能先撤&#xff0c;下一个活儿排期一乱&#xff0c;整条链往后倒。这篇把主材下单时点的推导过程写下来…

作者头像 李华
网站建设 2026/9/24 17:49:23

Python 项目应用:Python 构建“e 起去旅行”网站从入门到实战指南

** 摘要**:本文手把手带你从零搭建一个基于 Flask 的旅行助手全栈项目,涵盖虚拟环境搭建、数据库模型设计、RESTful 接口开发、前端模板渲染、用户注册登录与行程收藏,以及生产环境部署与安全加固。文章提供可直接复制的完整代码,并给出推荐算法、社交分享、离线缓存三个可…

作者头像 李华