avatar

剑指Offer-从上到下打印二叉树II

📝题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7

返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]

限制:节点总数 <= 1000


📝思路

树的层次遍历是简单的,本题在层次遍历的基础上增加了按层打印的要求。起初我以为可以计算每层的节点,但明显地,当存在大量 null 节点时计数是不准确的。
注意到,在层次遍历过程中左右子节点总是同时入队的,即当前队列中所有的节点都属于同一层,此时问题就迎刃而解了。

📝题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> q;
vector<vector<int>> res;

q.push(root);
vector<int> inner;
while (!q.empty()) {
int len = q.size(); /* 关键代码 */
for (int i = 0; i < len; i++) {
TreeNode* tmp = q.front();
q.pop();

if (tmp != NULL) {
inner.push_back(tmp->val);
q.push(tmp->left);
q.push(tmp->right);
}
}
if (!inner.empty()) {
res.push_back(inner);
inner.clear();
}
}
return res;
}
Author:WhiteBeerHouse
Link:https://github.com/WhiteBeerHouse/WhiteBeerHouse.github.io/tree/master/2021/03/06/%E5%89%91%E6%8C%87Offer-%E4%BB%8E%E4%B8%8A%E5%88%B0%E4%B8%8B%E6%89%93%E5%8D%B0%E4%BA%8C%E5%8F%89%E6%A0%91II/
Copyright Notice:All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.