Given an n-ary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example, given a 3-ary
tree:
We should return its level order traversal:
[ [1], [3,2,4], [5,6] ]
求解方法:
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
vector<vector<int>> res;
if(root == NULL) return res;
else
{
vector<int> sublevel0;
sublevel0.push_back(root->val);
res.push_back(sublevel0);
subLevelOrder(root,res,0);
return res;
}
}
private:
void subLevelOrder(Node* root, vector<vector<int>> &level, int d)
{
if(root->children.size()<1) return;
vector<int> sublevel;
for(size_t i=0; i< root->children.size(); i++)//存放该层的数据值
{
sublevel.push_back(root->children[i]->val);
}
if(d+2 > level.size()) //上层已经遍历结束,新的一层刚刚到达,可以直接push_back
{
level.push_back(sublevel);
}
else //新的一层已经访问过,数组中存在同层的数据, 只需要将数据放在尾部即可
{
level[d+1].insert(level[d+1].end(),sublevel.begin(),sublevel.end());
}
for(size_t i=0; i<root->children.size(); i++)//对每一个子树执行相同的操作
{
subLevelOrder(root->children[i],level,d+1);
}
}
};