二叉树的层序遍历需要借助队列来实现
public List<List<Integer>> levelOrder(TreeNode root) {
//如果为空 就直接返回
if (root == null){
return new ArrayList<>();
}
// 创建结果集
List<List<Integer>> res = new ArrayList<>();
// 创建队列
Queue<TreeNode> queue = new LinkedList<>();
// 将根节点加入到队列
queue.offer(root);
while (!queue.isEmpty()){
// 创建每一层的结果集
List<Integer> list = new ArrayList<>();
//该层节点的个数
int count=queue.size();
//每层的节点数 ,如果为0则该层遍历完成
while (count>0){
//将队列的首个节点poll 出来
TreeNode node = queue.poll();
//将这个节点加入到该层的结果集中
list.add(node.val);
// 从左到右判断 判断左子节点是否存在 有就加入到队列中
if (node.left != null){
queue.offer(node.left);
}
if (node.right != null){
queue.offer(node.right);
}
// 一个节点出队列 数量减1
count--;
}
//将每层的结果集 加入到最后结果中
res.add(list);
}
return res;
}