从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
提示:
节点总数 <= 1000
来源:
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof
题解:
广度优先遍历(BFS):BFS 通常借助队列的先入先出特性来实现
时间复杂度 O(N):N 为二叉树的节点数量,即 BFS 需循环 N 次
空间复杂度 O(N):最差情况下(当树为平衡二叉树),最多有 N/2 个树节点同时在 queue 中,使用 O(N) 大小的额外空间
/**
* 剑指 Offer 32 - II. 从上到下打印二叉树 II
*/
public List<List<Integer>> levelOrder(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
List<List<Integer>> res = new ArrayList<>();
if (root != null) {
queue.add(root);
}
// 当队列不为空时遍历队列
while (!queue.isEmpty()) {
// 临时集合,存储当前层的遍历结果
List<Integer> tmp = new ArrayList<>();
// 遍历当前层的所有节点
for (int i = queue.size(); i > 0; i--) {
// 队列中的队首节点出队并加入 tmp 中
TreeNode node = queue.poll();
tmp.add(node.val);
// 将当前节点左、右孩子加入到队列尾
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
}
res.add(tmp);
}
return res;
}