57、按之字形顺序打印二叉树
一、题目
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
二、解法
1 import java.util.ArrayList; 2 import java.util.LinkedList; 3 import java.util.Queue; 4 import java.util.Stack; 5 6 /* 7 public class TreeNode { 8 int val = 0; 9 TreeNode left = null; 10 TreeNode right = null; 11 12 public TreeNode(int val) { 13 this.val = val; 14 15 } 16 17 } 18 */ 19 public class Solution { 20 public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { 21 ArrayList<ArrayList<Integer>> result = 22 new ArrayList<ArrayList<Integer>>();//返回结果 23 Queue<TreeNode> data = new LinkedList<TreeNode>();//保存树节点 24 if (pRoot == null) 25 return result; 26 data.add(pRoot);//添加根节点 27 boolean isReverse = true;//按照层序之字形 28 Stack<TreeNode> stack = new Stack<TreeNode>(); 29 while (!data.isEmpty()) { 30 ArrayList<Integer> oneLine = new ArrayList<Integer>();//保存一行结果 31 int p = 0,size = data.size(); 32 while (p++ < size) { 33 TreeNode t = data.poll(); 34 if (isReverse) 35 oneLine.add(t.val); 36 else 37 stack.push(t); 38 if (t.left != null) 39 data.add(t.left); 40 if (t.right != null) 41 data.add(t.right); 42 } 43 isReverse = !isReverse; 44 if(!stack.isEmpty()){ 45 while(!stack.isEmpty()) 46 oneLine.add(stack.pop().val); 47 } 48 result.add(oneLine); 49 } 50 return result; 51 } 52 53 }