import java.util.*;

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

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
        // write code here
        ArrayList<ArrayList<Integer>> list = new ArrayList();
        if(root == null)return list;
        Queue<TreeNode> queue = new LinkedList();
        queue.offer(root);
        while(!queue.isEmpty()){
//             存储每层的节点值
            ArrayList<Integer> result = new ArrayList();
//             获取每层的节点数
            int size = queue.size();
            for(int i=0;i<size;i++){
//                 从左至右取出当前层的节点,并从左至右将当前节点的左右节点存入队列
                TreeNode node = queue.poll();
                if(node.left !=null)queue.offer(node.left);
                if(node.right!=null)queue.offer(node.right);
//                 存储当前节点的值
                result.add(node.val);
            }
            list.add(result);
        }
        return list;
    }
}