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;
}
}