/**
     * 简单暴力解法
     * 用双端队列好
     * addFirst
     * addLast
     *
     * @param pRoot
     * @return
     */
    public static ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        LinkedList<TreeNode> queue = new LinkedList<>(); // 每层往后存,从头取
        Stack<TreeNode> stack = new Stack<>();
        ArrayList<ArrayList<Integer>> ret = new ArrayList<ArrayList<Integer>>();
        if (pRoot == null) {
            return ret;
        }
        queue.offer(pRoot);
        int m = 1;
        while (queue.peek() != null) {
            ArrayList<Integer> level = new ArrayList<Integer>();
            int currentLevelSize = queue.size();
            for (int i = 1; i <= currentLevelSize; ++i) {
                TreeNode node = queue.poll();
                if (m % 2 == 0) {
                    stack.push(node);
                } else {
                    level.add(node.val);
                }
                if (node.left != null) {
                    queue.offer(node.left);
                }
                if (node.right != null) {
                    queue.offer(node.right);
                }
            }
            if (m % 2 == 0) {
                while (stack.size() != 0) {
                    level.add(stack.pop().val);
                }
            }
            ret.add(level);
            m++;
        }
        return ret;
    }