题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
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;
}
查看10道真题和解析