力扣 - 剑指 Offer 32 - II. 从上到下打印二叉树 II
题目
剑指 Offer 32 - II. 从上到下打印二叉树 II
思路1
- 和剑指 Offer 32 - I. 从上到下打印二叉树很类似,不过这一题多加了一个条件,就是是要按层来存储节点的
- 在每次循环的时候要先获取队列中存在多少个元素
size
,这代表当前层有多少个节点,然后我们再用一个内循环将这些节点读取出来(读取的同时也要将子节点加入到队列中),每循环一次size
减 1,直到size为 0,说明当前层遍历结束,然后进行下一层的遍历
代码
class Solution {
public List> levelOrder(TreeNode root) {
if (root == null) {
return new LinkedList<>();
}
Queue queue = new LinkedList<>();
List> res = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
List temp = new LinkedList<>();
// 获取当前队列的节点个数,代表这一层有多少个节点
int size = queue.size();
while (size > 0) {
TreeNode node = queue.poll();
temp.add(node.val);
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
size--;
}
// 每遍历完一层都添加到res中
res.add(temp);
}
return res;
}
}
复杂度分析
- 时间复杂度:\(O(N)\)
- 空间复杂度:\(O(N)\)