102. 二叉树的层序遍历
查看题目中等
树
二叉树
广度优先搜索
中频
解法一:队列
时间复杂度:O(n) | 空间复杂度:O(n) | 推荐使用
动画演示
二叉树层序遍历
遍历结果:
当前队列:
队列为空
代码实现
public List<List<Integer>> levelOrder(TreeNode root) {
if (root == null) {
return new ArrayList<>();
}
List<List<Integer>> result = new ArrayList<>();
Queue<TreeNode> queue = new ArrayDeque<>();
queue.add(root);
while (!queue.isEmpty()) {
List<Integer> level = new ArrayList<>();
int queueSize = queue.size();
for (int i = 0; i < queueSize; i++) {
TreeNode temp = queue.poll();
level.add(temp.val);
//左子树不为空,队列中添加左
if (temp.left != null) {
queue.add(temp.left);
}
//右子树不为空,队列中添加右
if (temp.right != null) {
queue.add(temp.right);
}
}
result.add(level);
}
return result;
}时间复杂度:O(n)
空间复杂度:O(n)
### 算法思路
层序遍历是按照树的层级,从上到下、从左到右依次访问每个节点的遍历方式。
1. **初始化**:创建一个队列,将根节点入队
2. **遍历队列**:
- 记录当前队列大小(即当前层的节点数)
- 依次取出队列中的节点,将其值加入当前层的结果列表
- 将节点的左、右子节点入队(如果存在)
3. **重复**:直到队列为空
### 实现特点
- 使用队列数据结构保存待访问的节点
- 每次处理一层的所有节点
- 时间复杂度:O(n),每个节点只访问一次
- 空间复杂度:O(n),最坏情况下队列需要存储一层的所有节点
### 应用场景
- 二叉树的层级遍历
- 广度优先搜索(BFS)
- 按层打印二叉树
- 寻找二叉树的最大深度等