当前位置: 首页 > 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;}
}

在这里插入图片描述

相关文章:

  • 模拟发送 Ctrl+Alt+Del 快捷键
  • 【简洁的代码永远不会掩盖设计者的意图】如何写出规范整洁的代码
  • 什么是tomcat?tomcat是干什么用的?
  • [SWPUCTF 2021 新生赛]crypto8
  • MySQL性能调优篇(3)-缓存的优化与清理
  • WordPress作者页面链接的用户名自动变成16位字符串串插件Smart User Slug Hider
  • 《小强升职记:时间管理故事书》阅读笔记
  • 【生产实测有效】Linux磁盘清理常用命令
  • 矩阵对角线元素的和
  • MySQL数据库基础(五):SQL语言讲解
  • Vue3之ElementPlus中Table选中数据的获取与清空方法
  • 抓包分析 TCP 协议
  • 反转一个单链表
  • 推荐一款自动转换Python代码为HTML界面的爆款GUI库!
  • 【MySQL】学习多表查询和笛卡尔积
  • [笔记] php常见简单功能及函数
  • ES6简单总结(搭配简单的讲解和小案例)
  • IDEA 插件开发入门教程
  • js如何打印object对象
  • Less 日常用法
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • nodejs调试方法
  • oschina
  • PaddlePaddle-GitHub的正确打开姿势
  • Sass Day-01
  • Vue UI框架库开发介绍
  • 飞驰在Mesos的涡轮引擎上
  • 工作手记之html2canvas使用概述
  • 后端_ThinkPHP5
  • 聊聊flink的BlobWriter
  • 我的业余项目总结
  • 一道闭包题引发的思考
  • 06-01 点餐小程序前台界面搭建
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ​业务双活的数据切换思路设计(下)
  • !$boo在php中什么意思,php前戏
  • "无招胜有招"nbsp;史上最全的互…
  • (AngularJS)Angular 控制器之间通信初探
  • (HAL库版)freeRTOS移植STMF103
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (ZT)一个美国文科博士的YardLife
  • (分布式缓存)Redis分片集群
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)插入排序
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)ORM