102.二叉树的层序遍历
给你二叉树的根节点 root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
提示:
- 树中节点数目在范围
[0, 2000]
内
解法一(广度优先+队列)
思路分析:
- 使用广度优先遍历即可, 结合队列先进先出的特性, 一层一层遍历二叉树;
实现代码
java
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
if (root == null) { // 特殊情况判空
return ans;
}
Queue<TreeNode> queue = new ArrayDeque<>();
queue.offer(root);
while (!queue.isEmpty()) {
// 获取该层节点的个数
int size = queue.size();
List<Integer> level = new ArrayList<>();
// 遍历当前层节点
for (int i = 0; i < size; ++ i) {
TreeNode node = queue.poll();
level.add(node.val); // 保存当前层节点值
// 继续将左右节点加入到队列中
if (node.left != null) queue.offer(node.left);
if (node.right != null) queue.offer(node.right);
}
ans.add(level);
}
return ans;
}
}
运行结果
2024/10/06 17:32:56
解答成功:
执行耗时:1 ms,击败了93.23% 的Java用户
内存消耗:44.16 MB,击败了5.42% 的Java用户
复杂度分析
- 时间复杂度:
, 即遍历每个节点; - 空间复杂度:
, 需要使用队列来存储节点;