和 从上到下打印二叉树 I 差不多,地址:https://blog.csdn.net/HUIEX/article/details/121452218
就一个输出形式不一样
要解决的问题就是:一层的元素要先存在一个集合中,
使用for循环,让该层队列的 所以元素都进行 存进list中 、将下一层的结点存入队列中
public List<List<Integer>> levelOrder(TreeNode root) {
if (root == null) return new ArrayList<>();
/** 创建一个队列,用来存放下一层的结点*/
Queue<TreeNode> queue = new LinkedList<>();
/** 创建一个List,用作结果集*/
List<List<Integer>> result= new ArrayList<>();
/** 将root结点放入队列中*/
queue.add(root);
/** 开始广度搜索*/
while ( !queue.isEmpty()){
//创建list存放该层的元素
ArrayList<Integer> list = new ArrayList<>();
for (int i = queue.size(); i > 0; i--) {
//取出队列的第一个结点
TreeNode pollNode = queue.poll();
//结点值放入list中
list.add(pollNode.val);
//将下一层元素存入队列中
if (pollNode.left != null) queue.add(pollNode.left);
if (pollNode.right != null) queue.add(pollNode.right);
}
result.add(list);
}
return result;
}