1.题目描述
给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。
2.解题思路
(1)N叉树和二叉树在递归过程中的区别是:二叉树中每一个节点自身只有左右两个子节点可以进行递归操作,而N叉树需要使用一个循环来对其每一个孩子节点进行递归。
(2)其余思路与二叉树的层次遍历一致,用一个变量depth来记录遍历过程中节点的深度。
/*
// 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:
void NlevelOrder(Node* root,int depth,vector<vector<int>> &array)
{
if(root==NULL)
return ;
if(array.size()-1<depth)
{
vector<int> temp;
temp.push_back(root->val);
array.push_back(temp);
}
else
{
array[depth].push_back(root->val);
}
if(!(root->children).empty())
for(int i=0;i<(root->children).size();i++)
NlevelOrder((root->children)[i],depth+1,array);
}
vector<vector<int>> levelOrder(Node* root) {
vector<vector<int>> array;
vector<int> temp;
array.push_back(temp);
NlevelOrder(root,0,array);
if(array[0].empty())
array.clear();
return array;
}
};