题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0
思路:我的方法太耗时间和空间。
用两个链表模拟队列,实现层序遍历。第一个链表的数据读取出来顺序装入list,第二个链表的数据逆序装入list;这样就能实现之字了。
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> resList=new ArrayList<>(); if(pRoot==null){ return resList; } LinkedList<TreeNode> queue1=new LinkedList<TreeNode>(); LinkedList<TreeNode> queue2=new LinkedList<TreeNode>(); TreeNode tmp1=null; queue1.addLast(pRoot); while(queue1.size()!=0 || queue2.size()!=0){ ArrayList<Integer> list1=new ArrayList<>(); while(queue1.size()!=0){ tmp1 = queue1.removeFirst(); list1.add(tmp1.val); if(tmp1.left!=null){ queue2.addLast(tmp1.left); } if(tmp1.right!=null){ queue2.addLast(tmp1.right); } } if(!list1.isEmpty()){ resList.add(list1); } ArrayList<Integer> list2=new ArrayList<>(); while(queue2.size()!=0){ tmp1 = queue2.removeFirst(); list2.add(0,tmp1.val); if(tmp1.left!=null){ queue1.addLast(tmp1.left); } if(tmp1.right!=null){ queue1.addLast(tmp1.right); } } if(!list2.isEmpty()){ resList.add(list2); } } return resList; }