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 root TreeNode类 
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {

        if(root==null){
            return new ArrayList();
        }
        // write code here
        ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
        // 然后每一层一个list 里面存储每一层的一个值
        LinkedList<TreeNode> queue=new LinkedList<TreeNode>();
        queue.offer(root);
        // push  和pop 是栈  offer  和poll 是队列
        while(!queue.isEmpty()){
          ArrayList<Integer> level=new ArrayList<Integer>();
          int size=queue.size();
          for(int i=0;i<size;i++){
             TreeNode head=queue.poll();
             level.add(head.val);
             if(head.left!=null) queue.offer(head.left);
             if(head.right!=null) queue.offer(head.right);
          }
          result.add(level);
        }

        return result;
    }
}