《剑指offer》——按之字形顺序打印二叉树
来源:互联网 发布:MAC上可以玩的游戏 编辑:程序博客网 时间:2024/04/29 19:58
T:
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
这道题目与前几天做的一道题目《把二叉树打印成多行》类似,只不过拿到题目里,把每一层的节点都保存在一个单独数组当中,这道题目中,需要按照“之”字形保存,很简单,用个flag标记一下就能做到。
我的code:
import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ /** * T: 按之字形顺序打印二叉树 * * 题目描述 * 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印, * 第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 * * date: 2015.12.4 14:01 * @author SSS * */ public class Solution { public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> resultsList = new ArrayList<ArrayList<Integer>>(); if (pRoot == null) { return resultsList; } Queue<TreeNode> listQueue = new LinkedList<TreeNode>(); listQueue.add(pRoot); int preCount = 1; // 本层的总长度 int curCount = 0; // 当前已经遍历的个数 int nextCount = 0; // 下一层的个数计数 // 收集每一层的数组 List<Integer> layerList = new ArrayList<Integer>(); boolean flag = true; // 正向还是反向收集 while (!listQueue.isEmpty()) { TreeNode tempNode = listQueue.poll(); layerList.add(tempNode.val); curCount ++; if (tempNode.left != null) { listQueue.add(tempNode.left); nextCount ++; } if (tempNode.right != null) { listQueue.add(tempNode.right); nextCount ++; } // 看是否已经遍历完一层了 if (curCount == preCount) { preCount = nextCount; curCount = 0; nextCount = 0; ArrayList<Integer> arrList = this.posiOrNegaCollection(layerList, flag); // 清空layerList数组 layerList.clear(); // 改变flag属性 if (flag) { flag = false; } else { flag = true; } resultsList.add(arrList); } } return resultsList; } /** * 正向(反向)收集 * @param layerList * @param flag * @return */ public ArrayList<Integer> posiOrNegaCollection(List<Integer> layerList, boolean flag) { ArrayList<Integer> arrList = new ArrayList<Integer>(); // 正向 if (flag) { for (int i = 0; i < layerList.size(); i++) { arrList.add(layerList.get(i)); } } else { // 反向 for (int i = layerList.size() - 1; i > -1; i--) { arrList.add(layerList.get(i)); } } return arrList; } }
0 0
- 《剑指offer》——按之字形顺序打印二叉树
- 剑指offer——按之字形顺序打印二叉树
- 剑指offer——按之字形顺序打印二叉树
- 剑指offer—按之字形顺序打印二叉树
- 剑指offer—按之字形顺序打印二叉树
- 剑指offer(C++)——按之字形顺序打印二叉树
- 剑指offer——59.按之字形顺序打印二叉树
- 剑指offer——面试题61:按之字形顺序打印二叉树
- 剑指offer--按之字形顺序打印二叉树
- 《剑指offer》按之字形顺序打印二叉树
- 剑指offer:按之字形顺序打印二叉树
- 剑指offer:按之字形顺序打印二叉树
- [剑指offer]按之字形顺序打印二叉树
- 剑指offer(五十三)之按之字形顺序打印二叉树
- 剑指Offer--061-按之字形顺序打印二叉树
- 《剑指offer》:[61]按之字形顺序打印二叉树
- 剑指offer(56)-按之字形顺序打印二叉树
- 剑指offer|按之字形顺序打印二叉树
- AndroidStudio NDK项目HelloJni
- iOS应用程序打包
- java Swing模仿百度搜索功能的实现
- GTK循环向标签写内容导致窗口白屏的问题
- JAVA接口,抽象及多态
- 《剑指offer》——按之字形顺序打印二叉树
- visio2010 去除跨线
- 深入分析JavaWeb Item6 -- servletConfig 与servletContext详解
- Android 异常- android.content.ActivityNotFoundException:
- android:gravity和android:layout_Gravity属性
- hdu 1065 I Think I Need a Houseboat
- ios 防止按钮快速点击造成多次响应的避免方法。
- 创建Ajax对象
- andriod 异步加载网络图片(LruCache缓存网络图片)