剑指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 }