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 {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> Print (TreeNode pRoot) {
        // write code here
        TreeNode head =pRoot;
        ArrayList<ArrayList<Integer>> res = new ArrayList();
        if(head == null) return res;
        Queue<TreeNode> temp = new LinkedList();
        temp.offer(head);
        TreeNode p;
        boolean flag = true;
        while(!temp.isEmpty()){
            ArrayList<Integer> row = new ArrayList();
            int n = temp.size();
            flag = !flag;
            for(int i = 0;i<n;i++){
                p = temp.poll();
                row.add(p.val);
                if(p.left!= null){
                    temp.offer(p.left);
                }
                if(p.right!=null){
                    temp.offer(p.right);
                }
            }
            if(flag) Collections.reverse(row);
            res.add(row);
        }
        return res;
    }
}

这个更是和层序遍历差不多 加上了一个flag来反转链表就行了