当前位置: 首页 > news >正文

Z字型遍历二叉树

编码过程

  1. 掏出Deque,先写从左往右遍历
class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {Deque<TreeNode> deque = new ArrayDeque<>();deque.offer(root);while (!deque.isEmpty()) {int n = deque.size();for (int i = 0; i < n; ++i) {TreeNode e = deque.pollFirst();if (e.left != null) {deque.offerLast(e.left);}if (e.right != null) {deque.offLast(e.right);}}}}
}
  1. 再写倒着遍历
class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {Deque<TreeNode> deque = new ArrayDeque<>();deque.offer(root);while (!deque.isEmpty()) {int n = deque.size();for (int i = 0; i < n; ++i) {TreeNode e = deque.pollFirst();if (e.left != null) {deque.offerLast(e.left);}if (e.right != null) {deque.offLast(e.right);}}for (int i = 0; i < n; ++i) {TreeNode e = deque.pollLast();if (e.right != null) {deque.offerFirst(e.right);}if (e.left != null) {deque.offerFirst(e.left);}}}}
}

到此,核心代码写完了,剩下的都是缝缝补补了。核心代码就一点:入队的时候左孩子在左边,右孩子在右边。这样,从右边出队就是从右往左倒序遍历,从左边出队就是从左往右正序遍历。
3. 区分当前层是从左往右还是从右往左。加个布尔变量或者整数变量分奇偶都行。

class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {Deque<TreeNode> deque = new ArrayDeque<>();deque.offer(root);int depth = 0;while (!deque.isEmpty()) {int n = deque.size();if (depth % 2 == 0) {for (int i = 0; i < n; ++i) {TreeNode e = deque.pollFirst();if (e.left != null) {deque.offerLast(e.left);}if (e.right != null) {deque.offLast(e.right);}}} else {for (int i = 0; i < n; ++i) {TreeNode e = deque.pollLast();if (e.right != null) {deque.offerFirst(e.right);}if (e.left != null) {deque.offerFirst(e.left);}}}depth++;}}
}
  1. 存结果
class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();if (root == null) {return res;}Deque<TreeNode> deque = new ArrayDeque<>();deque.offer(root);int depth = 0;while (!deque.isEmpty()) {List<Integer> level = new ArrayList<>();int n = deque.size();if (depth % 2 == 0) {for (int i = 0; i < n; ++i) {TreeNode e = deque.pollFirst();level.add(e.val);if (e.left != null) {deque.offerLast(e.left);}if (e.right != null) {deque.offerLast(e.right);}}} else {for (int i = 0; i < n; ++i) {TreeNode e = deque.pollLast();level.add(e.val);if (e.right != null) {deque.offerFirst(e.right);}if (e.left != null) {deque.offerFirst(e.left);}}}depth++;res.add(level);}return res;}
}
  1. 稍微重构一下
class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();if (root == null) {return res;}Deque<TreeNode> deque = new ArrayDeque<>();deque.offer(root);int depth = 0;while (!deque.isEmpty()) {List<Integer> level = new ArrayList<>();int n = deque.size();for (int i = 0; i < n; ++i) {if (depth % 2 == 0) {TreeNode e = deque.pollFirst();level.add(e.val);if (e.left != null) {deque.offerLast(e.left);}if (e.right != null) {deque.offerLast(e.right);}} else {TreeNode e = deque.pollLast();level.add(e.val);if (e.right != null) {deque.offerFirst(e.right);}if (e.left != null) {deque.offerFirst(e.left);}}}depth++;res.add(level);}return res;}
}

欧了

相关文章:

Z字型遍历二叉树

编码过程 掏出Deque&#xff0c;先写从左往右遍历 class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {Deque<TreeNode> deque new ArrayDeque<>();deque.offer(root);while (!deque.isEmpty()) {int n deque.size();f…...

【Go语言成长之路】安装Go

文章目录 安装Go一、下载Go语言安装包二、删除以前安装的Go版本三、添加/usr/local/go/bin到环境变量内四、确认安装成功 安装Go Note: 这里只演示安装Linux版本的Go&#xff0c;若为其它版本&#xff0c;请按照官网的安装教程进行安装即可。 一、下载Go语言安装包 ​ 在浏览…...

C语言常见面试题:C语言中如何进行图形界面编程?

在C语言中进行图形界面编程通常需要借助一些图形库。以下是一些常用的C语言图形库及其使用方法&#xff1a; GTK (GIMP Toolkit)&#xff1a; GTK 是一个广泛使用的开源图形库&#xff0c;可用于创建跨平台的桌面应用程序。它提供了一套丰富的控件&#xff0c;如按钮、文本框、…...

删除元素(数组)

题目描述 输入一个递增有序的整型数组A有n个元素&#xff0c;删除下标为i的元素&#xff0c;使其仍保持连续有序。注意&#xff0c;有效下标从0开始。 定义如下两个函数分别实现删除元素操作和数组输出操作。 void del(int a[], int n, int i); /*删除数组a中下标为i的元素*…...

WPF DataTemplate内重写BorderBrush,VisualBrush内数据源绑定提示绑定失败

定义DataTemplate 数据模板文件&#xff0c;内容如下 <DataTemplate x:Key"{DataTemplateKey {x:Type VM:TemplateListVM}}" DataType"{x:Type VM:TemplateListVM}"> <Grid Margin"0" Grid.Row"3" Height"50" Ver…...

ElasticSearch搜索与分析引擎-Linux离线环境安装教程

目录 一、下载安装包 网盘链接: 二、安装流程及遇到的问题和解决方案 &#xff08;1&#xff09;JDK安装 &#xff08;2&#xff09;Elasticsearch安装 &#xff08;3&#xff09;Kibana安装 ​&#xff08;4&#xff09;Ik分词器安装 三、启动过程中的问题 &#xff…...

网络安全全栈培训笔记(59-服务攻防-中间件安全CVE复现lSApacheTomcataNginx)

第59天 服务攻防-中间件安全&CVE复现&lS&Apache&Tomcata&Nginx 知识点&#xff1a; 中间件及框架列表&#xff1a; lIS,Apache,Nginx,Tomcat,Docker,Weblogic,JBoos,WebSphere,Jenkins, GlassFish,Jira,Struts2,Laravel,Solr,Shiro,Thinkphp,Sprng,Flask,…...

操作系统真象还原---系列笔记总结

闲话 最开始知道这本书是在校内论坛上&#xff0c;有同学通过这本书里的项目拿到大厂的ssp offer&#xff0c;于是就从网上订购了这本较为大部头的书&#xff0c;想要在简历上添加一个足够底层并且有意思的项目经历&#xff0c;从而帮助自己在秋招时赢得一个好的offer。 第一遍…...

猫用空气净化器好吗?好用的养猫宠物空气净化器品牌推荐

作为一个养猫五年的资深铲屎官&#xff0c;我对如何轻松快乐地养猫有一些心得。猫咪每天在家里奔跑&#xff0c;导致家里经常会出现“猫毛雪”&#xff0c;沙发、地板和衣服都成了重灾区。在除猫毛的问题上&#xff0c;我真的尝试了各种方法&#xff0c;几乎用上了所有的技能。…...

【计网·湖科大·思科】实验六 IP数据报的发送和转发流程、默认路由和特定主机路由

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…...

freertos 源码分析一 list链表数据结构

链表和任务管理是freertos 的核心&#xff0c;先分析链表源码&#xff0c;freertos的链表是双向环形链表&#xff0c;定义与数据结构在list.h中&#xff0c;表项的初始化&#xff0c;插入与删除在list.c中。 数据结构 一、表项数据结构 struct xLIST_ITEM {listFIRST_LIST_IT…...

小程序uni-swiper-action-item滑动不了

<uni-swipe-action><uni-swipe-action-item :options"options"></uni-swipe-action-item></uni-swipe-action> 要在options前面加上right或left <uni-swipe-action><uni-swipe-action-item :right-options"options">&…...

【新课】安装部署系列Ⅲ—Oracle 19c Data Guard部署之两节点RAC部署实战

本课程由云贝教育-刘峰老师出品&#xff0c;感谢关注 课程介绍 Oracle Real Application Clusters (RAC) 是一种跨多个节点分布数据库的企业级解决方案。它使组织能够通过实现容错和负载平衡来提高可用性和可扩展性&#xff0c;同时提高性能。本课程基于当前主流版本Oracle 1…...

【从零开始的rust web开发之路 四】rust语言tokio异步使用redis教程

文章目录 前言一、首先引入依赖二、创建redis客户端三、相关操作设置值mset设置多个key值设置含有过期时间的值如果key不存在才设置获取基本类型值删除一个键删除多个键判断键是否存在 如何使用json序列化导入相关依赖代码相关实例 总结 前言 使用rust写web&#xff0c;自然是…...

uniapp本地存储的几种方式localStorage

在uniapp开发中&#xff0c;本地存储是一个常见的需求。本地存储可以帮助我们在客户端保存和管理数据&#xff0c;以便在应用程序中进行持久化存储。本文将介绍uniapp中本地存储的几种方式&#xff0c;以及相关的代码示例。 介绍 在移动应用开发中&#xff0c;我们经常需要将…...

扩展学习|统计学习理论(SLT)与极限学习机(ELM)应用于大社会数据分析

文献来源&#xff1a;[1] Oneto L , Bisio F , Cambria E ,et al.Statistical Learning Theory and ELM for Big Social Data Analysis[J].IEEE Computational Intelligence Magazine, 2016, 11(3):45-55.DOI:10.1109/MCI.2016.2572540. 提取链接&#xff1a;链接&#xff1a;h…...

配置实例—交换机VLAN聚合配置实例

一、组网需求 某公司拥有多个部门且位于同一网段&#xff0c;为了提升业务安全性&#xff0c;将不同部门的用户划分到不同VLAN中。现由于业务需要&#xff0c;不同部门间的用户需要互通。如图1所示&#xff0c;VLAN2和VLAN3为不同部门&#xff0c;现需要实现不同VLAN间的用户可…...

网络开发的隐形壁垒:如何巧妙解决跨域难题?

什么是跨域 跨域是浏览器受同源&#xff08;协议、域名、端口&#xff09;策略的限制&#xff0c;不允许不同源的站点之间进行某些操作&#xff08;如发送ajax请求&#xff0c;操作dom&#xff0c;读取cookie&#xff09;&#xff0c;如果不进行特殊配置是不能操作成功的&…...

【极简】conda同一个服务器上迁移环境 export / create

导出 直接看conda的document&#xff1a;https://docs.conda.io/projects/conda/en/latest/commands/env/export.html conda env export conda env export --file SOME_FILE重建 conda documentation: https://docs.conda.io/projects/conda/en/latest/commands/env/create.…...

HBase 数据导入导出

HBase 数据导入导出 1. 使用 Docker 部署 HBase2. HBase 命令查找3. 命令行操作 HBase3.1 HBase shell 命令3.2 查看命名空间3.3 查看命名空间下的表3.4 新建命名空间3.5 查看具体表结构3.6 创建表 4. HBase 数据导出、导入4.1 导出 HBase 中的某个表数据4.2 导入 HBase 中的某…...

如何快速上手wolfSSL:嵌入式设备TLS加密的完整入门指南

如何快速上手wolfSSL&#xff1a;嵌入式设备TLS加密的完整入门指南 【免费下载链接】wolfssl The wolfSSL library is a small, fast, portable implementation of TLS/SSL for embedded devices to the cloud. wolfSSL supports up to TLS 1.3 and DTLS 1.3! 项目地址: http…...

终极C++编码标准指南:基于C++核心规范的AI驱动最佳实践

终极C编码标准指南&#xff1a;基于C核心规范的AI驱动最佳实践 【免费下载链接】everything-claude-code The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Curso…...

m4s-converter:3分钟搞定B站缓存视频的终极转换方案

m4s-converter&#xff1a;3分钟搞定B站缓存视频的终极转换方案 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾为B站视频突然下架而烦恼…...

7个高效技巧:用FanControl实现智能风扇精准控制

7个高效技巧&#xff1a;用FanControl实现智能风扇精准控制 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanCo…...

颈腰不适乱按摩只会越治越糟,颈椎病腰间盘突出防治要找对方法,从根源到防护全攻略在这里。

生活中很多人出现颈肩腰腿痛&#xff0c;第一反应就是找按摩店放松、贴膏药缓解&#xff0c;可症状不仅没好转&#xff0c;反而反反复复加重&#xff0c;这是因为没有认清颈椎病、腰椎间盘突出的发病根源&#xff0c;用错了防治方法。作为职场人群最高发的脊柱疾病&#xff0c;…...

CLIP-GmP-ViT-L-14模型API压力测试:使用JMeter进行性能评估

CLIP-GmP-ViT-L-14模型API压力测试&#xff1a;使用JMeter进行性能评估 最近在项目里用上了CLIP-GmP-ViT-L-14模型&#xff0c;它处理图文匹配的能力确实不错。但模型部署上线后&#xff0c;我心里一直有个疑问&#xff1a;这API到底能扛住多少并发请求&#xff1f;响应时间稳…...

如何通过可视化学习快速掌握RISC-V?专业仿真平台全解析

如何通过可视化学习快速掌握RISC-V&#xff1f;专业仿真平台全解析 【免费下载链接】Ripes A graphical processor simulator and assembly editor for the RISC-V ISA 项目地址: https://gitcode.com/gh_mirrors/ri/Ripes RISC-V学习工具的选择直接影响掌握效率&#x…...

忍者像素绘卷实战教程:微信小程序用户上传文字→返回像素图→支持长按保存

忍者像素绘卷实战教程&#xff1a;微信小程序用户上传文字→返回像素图→支持长按保存 1. 项目概述与核心价值 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工具&#xff0c;专为微信小程序环境设计。它能够将用户输入的文字描述转化为具有16-Bit复古游戏风格的像…...

类比推理!!

考点 (一)语义关系(理解词义为主) 1. 近义 / 反义 适用场景:成语题优先考虑 ✅ 近义关系 风雨同舟 ∶ 同甘共苦(共患难) 赤诚相待 ∶ 肝胆相照(真诚) ✅ 反义关系 过河拆桥 ∶ 饮水思源(忘恩 vs 感恩) 二级辨析重点 👉 感情色彩必须一致,顺序需要一致 江心…...

别再傻傻轮询了!用STM32外部中断做按键检测,CPU占用率直降90%

STM32外部中断实战&#xff1a;按键检测的CPU占用率优化指南 在嵌入式系统开发中&#xff0c;按键检测是最基础却又最容易影响系统性能的功能之一。许多开发者习惯使用轮询方式检测按键状态&#xff0c;这种方式虽然实现简单&#xff0c;但在资源受限的单片机&#xff08;如ST…...