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

北邮复试刷题103. 二叉树的锯齿形层序遍历

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

在这里插入图片描述

题解:

方法一:按层模拟BFS

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public void reverse(List<Integer> list){int size = list.size();int tmp[] = new int[size];for(int i=0;i<size;i++){tmp[i] = list.get(i);}int index = 0;for(int i=size-1;i>=0;i--){list.set(index,tmp[i]);index++;}}public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();if(root == null){return res;}Queue<TreeNode> queue = new LinkedList<>();boolean flag = true; // true代表->   false代表<-List<Integer> first = new ArrayList<>();first.add(root.val);if(root.left != null)queue.offer(root.left);if(root.right != null)queue.offer(root.right);res.add(first);while(!queue.isEmpty()){List<Integer> tmp = new ArrayList<>();int count = queue.size();while(count > 0){TreeNode node = queue.poll();if(node.left != null)queue.offer(node.left);if(node.right != null)queue.offer(node.right);tmp.add(node.val);count--;}flag = !flag;if(!flag){//对此时取到的tmp顺序取反reverse(tmp);}res.add(tmp);}return res;}
}

方法二:双端队列+奇偶

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();if(root == null){return res;}Queue<TreeNode> queue = new LinkedList<>();int len = 1;// 奇数代表->   偶数代表<-List<Integer> first = new LinkedList<>();first.add(root.val);if(root.left != null)queue.offer(root.left);if(root.right != null)queue.offer(root.right);res.add(first);len++;while(!queue.isEmpty()){// 队列依旧是传统队列,但是每一个加入到res中的小list都是用双端形式,从而形式上实现双端队列List<Integer> tmp = new LinkedList<>();// 也是因为链表形式相较于数组形式更利于反转int count = queue.size();while(count > 0){TreeNode node = queue.poll();if(node.left != null)queue.add(node.left);      if(node.right != null)queue.offer(node.right);if(len % 2 == 0){tmp.addFirst(node.val); }else{tmp.addLast(node.val);}count--;}res.add(tmp);len++;}return res;}
}

在这里插入图片描述

相关文章:

  • 目标检测 | 卷积神经网络(CNN)详细介绍及其原理详解
  • 创新设计与技术突破:嵌入式系统在人工智能和机器学习领域的应用前景
  • 常见的JavaScript书写基本规范
  • 《Linux 简易速速上手小册》第8章: 安全性与加固(2024 最新版)
  • B3657 [语言月赛202209] 公园门票
  • oracle dbms_job 写法
  • ubuntu下如何查看显卡及显卡驱动
  • CSS之BFC
  • 备战蓝桥杯---图论之最短路Bellman-Ford算法及优化
  • Kafka King 推荐一款漂亮、现代、实用的kafka客户端
  • Ae下载安装(视频剪辑软件AE安装包下载2024)
  • 【GO语言卵细胞级别教程】05.项目创建和函数讲解
  • C#中实现串口通讯和网口通讯(使用SerialPort和Socket类)
  • WordPress如何自建txt文本经典语录并随机显示一句话经典语录?
  • C++类和对象-多态->案例1计算器类、案例2制作饮品、案例3电脑组装需求分析和电脑组装具体实现
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • golang 发送GET和POST示例
  • Java教程_软件开发基础
  • Js基础——数据类型之Null和Undefined
  • Mithril.js 入门介绍
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Ruby 2.x 源代码分析:扩展 概述
  • 阿里云购买磁盘后挂载
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 手写一个CommonJS打包工具(一)
  • 微信开源mars源码分析1—上层samples分析
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 一个JAVA程序员成长之路分享
  • ionic入门之数据绑定显示-1
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • #define用法
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (12)Hive调优——count distinct去重优化
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (js)循环条件满足时终止循环
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Python第六天)文件处理
  • (搬运以学习)flask 上下文的实现
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (推荐)叮当——中文语音对话机器人
  • (新)网络工程师考点串讲与真题详解
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)四层和七层负载均衡的区别
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net mvc 获取url中controller和action
  • .net Signalr 使用笔记
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .netcore 获取appsettings
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • /*在DataTable中更新、删除数据*/
  • @angular/cli项目构建--Dynamic.Form
  • [1127]图形打印 sdutOJ