解题思路
老套路借助队列
与前几题的不同:在子树vector入队的过程中需要迭代一个个入队。
代码
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val) {
val = _val;
}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
queue<Node*> que;
if(root != NULL) que.push(root); //根节点入队
vector<vector<int>> result;
while(!que.empty()){
int size = que.size(); //队列大小为行数组大小
vector<int> resultLine; //行结果
for(int i=0;i<size;i++){
Node* node = que.front(); //取到队头元素
que.pop(); //出队
resultLine.push_back(node->val); //行结果
//若存在子树,子树入队
if(!node->children.empty()){
for (vector<Node*> ::iterator j = node->children.begin(); j != node->children.end(); j++){
que.push(*j);
}
}
}
//1行遍历结束,装束结果
result.push_back(resultLine);
}
return result;
}
};
执行用时:20 ms, 在所有 C++ 提交中击败了34.40%的用户
内存消耗:11.8 MB, 在所有 C++ 提交中击败了10.63%的用户
通过测试用例:38 / 38
卡哥:
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
queue<Node*> que;
if (root != NULL) que.push(root);
vector<vector<int>> result;
while (!que.empty()) {
int size = que.size();
vector<int> vec;
for (int i = 0; i < size; i++) {
Node* node = que.front();
que.pop();
vec.push_back(node->val);
for (int i = 0; i < node->children.size(); i++) { // 将节点孩子加入队列
if (node->children[i]) que.push(node->children[i]);
}
}
result.push_back(vec);
}
return result;
}
};