给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。
例如,给定一个 3叉树
:
返回其层序遍历:
[
[1],
[3,2,4],
[5,6]
]
说明:
- 树的深度不会超过
1000
。 - 树的节点总数不会超过
5000
。
解法其实和二叉树的层序遍历是一样的。
解法一:递归,即DFS,深度优先遍历
class Solution {
public:
vector<vector<int>> res;
vector<vector<int>> levelOrder(Node* root) {
level_Traversal(root, 0);
return res;
}
void level_Traversal(Node* root, int level) {
if(root) {
if(level >= res.size()) res.resize(level+1);
res[level].push_back(root->val);
for(int i = 0; i < root->children.size(); i++) {
level_Traversal(root->children[i], level+1);
}
}
}
};
解法二:使用迭代,手动维护一个队列
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
vector<vector<int>> res;
queue<Node*> que;
if(root) que.push(root);
while(!que.empty()) {
int length = que.size();
vector<int> vec;
while(length--) {
Node* tmp = que.front();
que.pop();
vec.push_back(tmp->val);
for(int i = 0; i < tmp->children.size(); i++) {
que.push(tmp->children[i]);
}
}
res.push_back(vec);
}
return res;
}
};