题目链接
解题思路
队列实现
题目要求的返回类型为 vector<vector<int>>
,可以用 map
来记录深度。
- 如果
root
为空,则直接返回; - 否则,将队列的节点设置为
pair<Node*,int>
(节点和它的深度)。
然后按照 BFS 的过程即可。
实现代码(C++)
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
if (root == nullptr) {
return vector<vector<int>>();
}
map<int,vector<int>> m;
queue<pair<Node*, int>> q;
q.push(make_pair(root, 0)); // 先将根节点及其深度入栈
m[0].push_back(root->val);
while (!q.empty()) {
pair<Node*,int> p = q.front();
q.pop();
for (int i = 0; i < p.first->children.size(); i++) {
q.push(make_pair(p.first->children[i], p.second + 1));
m[p.second + 1].push_back(p.first->children[i]->val);
}
}
int size = m.size();
vector<vector<int>> ans(size);
for (int i = 0; i < size; i++) {
ans[i] = m[i];
}
return ans;
}
};