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

剑指 Offer 32 - III. 从上到下打印二叉树 III

目录

使用函数实现

使用双端队列实现


请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

例如:
给定二叉树: [3,9,20,null,null,15,7],

    3/ \9  20/  \15   7

返回其层次遍历结果:

[[3],[20,9],[15,7]
]

提示:

  1. 节点总数 <= 1000

使用函数实现

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {List<List<Integer>> res=new ArrayList<>();public List<List<Integer>> levelOrder(TreeNode root) {helper(root,0);return res;}private void helper(TreeNode root,int level){if(root==null)return;if(res.size()==level){res.add(new ArrayList<>());}if(level%2==0){res.get(level).add(root.val);}else{res.get(level).add(0,root.val);}helper(root.left,level+1);helper(root.right,level+1);}
}

使用双端队列实现

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {boolean isEven = false;//从1开始,第一行不是偶数if(root==null) return new ArrayList<>();List<List<Integer>>  ans = new ArrayList<>();Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while(true){int size = queue.size();LinkedList<Integer> item = new LinkedList<>();for(int i=0;i<size;i++){root = queue.poll();if(!isEven) item.addLast(root.val);else item.addFirst(root.val);if(root.left!=null) queue.offer(root.left);if(root.right!=null) queue.offer(root.right);}isEven = !isEven;ans.add(item);if(queue.isEmpty()) break;}return ans;}
}

http://www.lryc.cn/news/137858.html

相关文章:

  • 【QT5-自我学习-线程qThread移植与使用-通过代码完成自己需要功能-移植小记3】
  • 后端开发12.商品模块
  • /usr/bin/containerd: Operation not permitted
  • 分析商务报表使用什么工具?
  • nginx文件配置
  • 视频云存储/安防监控EasyCVR视频汇聚平台如何通过角色权限自行分配功能模块?
  • 小程序定位到 胶囊的三个点大概中间
  • Maven详解
  • 音视频 ffplay命令-高级选项
  • [管理与领导-44]:IT基层管理者 - 个人管理 - 从掌握管理知识开始入门:管理的常识和基础
  • c#两个数进行交换
  • JVM——类加载与字节码技术—字节码指令
  • 同步与互斥——相互合作,相互制约
  • 7个改变玩法规则的ChatGPT应用场景
  • 软考高级系统架构设计师系列论文七十九:论软件产品线技术
  • Spring IOC容器:让Java对象的管理和配置更简单
  • 【C++小项目】实现一个日期计算器
  • Ext JS 之Microloader(微加载器)
  • 【科研】-- 如何将Endnote中参考文献格式插入到Word?
  • Python爬虫实战案例——第二例
  • 深入理解Spring的ImportBeanDefinitionRegistrar接口及其应用
  • 【面试题】你理解中JS难理解的基本概念是什么?
  • 微服务中间件--MQ服务异步通信
  • 爆火「视频版ControlNet」开源了!靠提示词精准换画风,全华人团队出品
  • 常用的数据可视化工具有哪些?要操作简单的
  • ssl卸载原理
  • 【C语言】动态内存管理,详细!!!
  • 2023年国赛 高教社杯数学建模思路 - 案例:退火算法
  • jenkins 日志输出显示时间戳的方式
  • geacon_pro配合catcs4.5上线Mac、Linux