剑指offer-按之字形顺序打印二叉树

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
 
使用双向链表,先把当前行按顺序打印,再取出当前行并将下一行存入链表
 1 public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {//树 双向链表 mytip
 2         ArrayList<ArrayList<Integer>> re = new ArrayList<>();
 3         LinkedList<TreeNode> queue = new LinkedList<>();
 4         if(null==pRoot){
 5             return re;
 6         }
 7         queue.add(null);
 8         queue.add(pRoot);
 9         
10         boolean flag = true;
11         while(queue.size()>1){//最后一个为null
12             TreeNode node = queue.poll();//当前不为null时,取出并将孩子结点存入链表
13             if(null==node){//当前为null是将链表中数打印
14                 ArrayList<Integer> list = new ArrayList<>();
15                 Iterator<TreeNode> iter = null;
16                 if(flag){
17                     iter = queue.iterator();//正向
18                 }else{
19                     iter = queue.descendingIterator();//反向
20                 }
21                 while(iter.hasNext()){
22                     TreeNode n = iter.next();
23                     list.add(n.val);
24                 }
25                 if(queue.size()>0){
26                     queue.add(null);
27                 }          
28                 re.add(list);
29                 flag = !flag;
30                 continue;//必须加
31             }
32             if(null!=node.left){
33                 queue.add(node.left);
34             }
35             if(null!=node.right){
36                 queue.add(node.right);
37             }
38         }
39         return re;
40     }

 

posted @ 2019-04-09 21:29  月半榨菜  阅读(101)  评论(0编辑  收藏  举报