剑指offer 61题 【树】按之字形顺序打印二叉树
来源:互联网 发布:明星年龄造假知乎 编辑:程序博客网 时间:2024/06/06 09:44
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
牛客传送门:点击打开链接
import java.util.*;public class Title61 { public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { // 所求结果 ArrayList<ArrayList<Integer> > result = new ArrayList<ArrayList<Integer> >(); if(pRoot == null) return result; // 这里返回的不是null // 每层的数据,加入result ArrayList<Integer> line = new ArrayList<Integer>(); // 是否反转 boolean isRotate = true; Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(pRoot); line.add(pRoot.val); result.add(line); // 用于反转 Stack<Integer> stack = new Stack<Integer>(); while(!queue.isEmpty()){ // 上一层的总数 int count = queue.size(); // 重置 line = new ArrayList<Integer>(); if(isRotate){ while(count-- > 0){ TreeNode node = queue.poll(); if(node.left != null){ queue.add(node.left); stack.add(node.left.val); } if(node.right != null){ queue.add(node.right); stack.add(node.right.val); } } // 将栈中的数添加到line中 while(!stack.isEmpty()){ line.add(stack.pop()); } }else{ while(count-- > 0){ TreeNode node = queue.poll(); if(node.left != null){ queue.add(node.left); line.add(node.left.val); } if(node.right != null){ queue.add(node.right); line.add(node.right.val); } } } if(line.size() >0) result.add(line); // 下一层反转 isRotate = !isRotate; } return result; } /** * 测试用例 * 1 * 2 3 * 4 5 6 7 * 8 9 */ public static void main(String[] args) { TreeNode a = new TreeNode(1); TreeNode b = new TreeNode(2); TreeNode c = new TreeNode(3); TreeNode d = new TreeNode(4); TreeNode e = new TreeNode(5); TreeNode f = new TreeNode(6); TreeNode g = new TreeNode(7); TreeNode h = new TreeNode(8); TreeNode i = new TreeNode(9); a.left = b;a.right = c; b.left = d;b.right = e;c.left = f;c.right = g; d.left = h;d.right = i; ArrayList<ArrayList<Integer> > result = new Title61().Print(a); for(ArrayList<Integer> line : result){ System.out.println(line); } /*[1] [3, 2] [4, 5, 6, 7] [9, 8] */ }}
0 0
- 《剑指offer》:[61]按之字形顺序打印二叉树
- 剑指offer--按之字形顺序打印二叉树
- 《剑指offer》按之字形顺序打印二叉树
- 剑指offer—按之字形顺序打印二叉树
- 《剑指offer》——按之字形顺序打印二叉树
- 剑指offer:按之字形顺序打印二叉树
- 剑指offer:按之字形顺序打印二叉树
- [剑指offer]按之字形顺序打印二叉树
- 剑指offer(五十三)之按之字形顺序打印二叉树
- 剑指Offer--061-按之字形顺序打印二叉树
- 剑指offer(56)-按之字形顺序打印二叉树
- 剑指offer——按之字形顺序打印二叉树
- 剑指offer|按之字形顺序打印二叉树
- 剑指offer-按之字形顺序打印二叉树
- 剑指offer-----按之字形顺序打印二叉树(java版)
- 【剑指Offer】按之字形顺序打印二叉树
- 剑指offer-按之字形顺序打印二叉树-php
- 剑指offer-59.按之字形顺序打印二叉树
- RecyclerView更新数据
- 类型转换问题
- 从NSURLSession下载和断点续传到NSURLSession使用说明及后台工作流程分析
- 无法创建XMLHTTP对象,请检查是否安装了MS XML Parser运行库
- 一台电脑怎么安装32位和64位的jdk,怎么配置环境变量
- 剑指offer 61题 【树】按之字形顺序打印二叉树
- SDP在pjsip中的应用
- xutils中dbutils的基础使用详解
- 堆排序与快速排序
- (4.2.34)Android开源控件ViewPager Indicator的使用方法
- 程序员,你会从 Bug 中学习么?【转载】
- C#hashtable使用说明 以及 Hashtable和HashMap的区别【总结性】
- php 5.4中php-fpm 的重启、终止操作命令
- 填坑:BAT批处理命令的一些总结