按之字形顺序打印二叉树
2018-03-11 20:41
239 查看
package com.niuke; import org.junit.Test; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; /** * Created by admin on 2018/3/11. */ public class PrintZ { public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> alist=new ArrayList<>();//Z型结果放入其中 ArrayList<Integer> list=new ArrayList<>(); LinkedList<TreeNode> queue=new LinkedList<>(); if(pRoot==null) {//代码的鲁棒性 return alist; } queue.addLast(null);//作为层分隔符 标记 queue.addLast(pRoot);//将头节点加入到队列中 boolean flag=true;//true为从左向右 false为从右向左 while (queue.size()!=1) {//最后会有一个分隔符 TreeNode tmp=queue.removeFirst();//每次删除队列中的一个值,并取出这个值看是否为分隔符 if(tmp==null) { Iterator<TreeNode> it=null; if(flag) { it=queue.iterator();//队列正方向迭代 } else { it=queue.descendingIterator();//队列反方向迭代 } flag=!flag; while (it.hasNext()) { list.add(it.next().val);//将队列中的值按迭代方向加入到list这中 } alist.add(new ArrayList<>(list));//每次都实例化 list.clear();//清空list queue.addLast(null);//添加层分隔符 } else { if(tmp.left!=null) {//如果二叉树有左子树加入到队列中 queue.add(tmp.left); 4000 } if(tmp.right!=null) {//如果二叉树有右子树加入到队列中 queue.add(tmp.right); } } } return alist; } @Test public void test() { TreeNode t=new TreeNode(1); t.left=new TreeNode(2); t.right=new TreeNode(3); t.left.left=new TreeNode(4); t.left.right=new TreeNode(5); t.right.left=new TreeNode(6); t.right.right=new TreeNode(7); Print(t); } }
相关文章推荐
- 剑指offer-----按之字形顺序打印二叉树(java版)
- 【剑指Offer】按之字形顺序打印二叉树
- 剑指offer——按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 【剑指offer】按之字形顺序打印二叉树
- 按之字形顺序打印二叉树(二叉树的层次遍历)
- 剑指offer(C++)——按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 剑指offer——按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按照之字形顺序打印二叉树
- 《剑指Offer》学习笔记--面试题61:按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 剑指offer——面试题61:按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 按之字形顺序打印二叉树Java实现