import java.util.*;
public class Solution {
    // 从上到下按层打印二叉树的val值,返回值为一个二维列表
    // 思路:bfs遍历二叉树,同时记录下当前层的节点数,以便插入对应行的二维列表中
    public ArrayList<ArrayList<Integer>> Print (TreeNode pRoot) {
        if(pRoot == null) return new ArrayList<>();
        // write code here
        ArrayList<ArrayList<Integer>> resList = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(pRoot);
        // index记录层数
        while(!queue.isEmpty()){
            // 记录当前层的节点数
            int num = queue.size();
            ArrayList<Integer> list = new ArrayList<>();
            // 嵌套循环的方式,将同一层的节点poll出,并将其左右子节点添加入队列,每次poll出都添加到链表中
            for(int i = 0;i<num;i++){
                TreeNode node = queue.poll();
                if(node.left != null) queue.add(node.left);
                if(node.right != null) queue.add(node.right);
                list.add(node.val);
            }
            // 将当前层的结点链表添加到总链表中
            resList.add(list);
        }
        return resList;
    }
}