1,题目要求
Given an n-ary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).
计算一颗多叉树的层次遍历。
2,题目思路
可以直接用递归的办法来实现这种层次遍历。同时,也可以用队列的形式,来实现这样的层次遍历也是可以的。
3,程序源码
方法1:
/*
// Definition for a Node.
class Node {
public:
int val = NULL;
vector<Node*> children;
Node() {}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
static int pr = []() {
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return 0;
}();
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
BFS(root, 0);
return res;
}
public:
void BFS(Node* node, int level)
{
if(node == nullptr) return;
if(level == res.size())
res.push_back(vector<int> ());
res[level].push_back(node->val);
for(auto n:node->children)
BFS(n, level+1);
}
private:
vector<vector<int>> res;
};
方法2:(利用队列)
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
vector<vector<int>> output;
if (!root) return output;
queue<Node*> treeTemp;
treeTemp.push(root);
auto treeNum = treeTemp.size();
while (treeNum) {
vector<int> valTemp;
for (auto i=0; i<treeNum; ++i) {
root = treeTemp.front();
valTemp.push_back(root->val);
treeTemp.pop();
for (auto childTemp:root->children)
treeTemp.push(childTemp);
}
output.push_back(valTemp);
treeNum = treeTemp.size();
}
return output;
}
};