1.题目
2.求解
今天的题目很丢人,不难,但不是自己做出来的,我的想法是每次遍历子节点的时候,将子节点存入queue,同时根据父节点的层数,保存本节点的层数,为此我创建了一个数组。但是我忽略了一件事就是树中是可能出现重复数据的,这会导致数据被覆盖掉。
实际上用一个很简单的方法就能够解决,将子节点保存在另一个队列中即可,等当前队列中所有数据都输出完了,再对子节点进行处理就好了。
今天真的是脑子不好使了属于是。
3.代码
我就不放自己的代码了这是一位大佬的代码,供大家参考:
力扣(这是大佬的链接)
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
if(root==nullptr) // 特判
return {};
vector<vector<int>> res;
queue<Node*> store;
store.push(root);
while(!store.empty()){ // 只要还有子节点就循环
int s = store.size(); // 当前层的节点数
res.push_back({});
for(int i=0;i<s;i++){ // 把当前层节点全部出队
Node* cur = store.front();
store.pop();
res.back().push_back(cur->val);
for(auto c : cur->children){ // 把当前层的所有节点的子节点加入队列
store.push(c);
}
}
}
return res;
}
};