层序遍历+链表翻转+标志位
1、根据题目意思就是要一层一层的获取二叉树,一层是正着来,一层是反着来,即Z字型。
想法:先层序遍历吧,肯定要一层一层来嘛!
然后的想法:一下从左到右,下一个从右到左,怎么来搞呢?emmmmm,标志位试一下哇!
flag=0 从左到右打印就是正常的遍历就可以了哇,然后就把flag=1
flag=1 链表就要反转,此时我查了一下ArrayList里面有一个set函数,可以把链表翻转,重新来个函数,当标志位为1,就翻转。

剩下的就是细节处理,可以看代码了!!!

import java.util.*;

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
         ArrayList<ArrayList<Integer> > res = new ArrayList<ArrayList<Integer> >();
        if(pRoot == null){
            return res;
        }
        Queue<TreeNode> rear = new LinkedList<>();

         rear.add(pRoot);
        int flag = 0;
        while( !rear.isEmpty() ){
            int size = rear.size();
            ArrayList<Integer> list = new ArrayList<>();
            while(size-- > 0){
                TreeNode temp = rear.poll();
                list.add(temp.val);
                if(temp.left != null){
                    rear.add(temp.left);
                }
                if(temp.right != null){
                    rear.add(temp.right);
                }
            }
            if(flag == 0){
                flag = 1;
            }else if(flag == 1){
                Reverse(list);
                flag = 0;
            }
            res.add(list);
        }
        return res;
    }
public ArrayList<Integer> Reverse(ArrayList<Integer> list){
           int top = 0;
           int end = list.size()-1;
           while(top < end){
               int temp = list.get(top);
               list.set(top,list.get(end));
               list.set(end,temp);
               top++;
               end--;
           }
        return list;
    }
}