解法
官方题解思路讲的非常清晰:
https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal/solution/ncha-shu-de-ceng-xu-bian-li-by-leetcode/
方法一:利用队列实现广度优先搜索
用一个列表存放节点值,队列存放节点。首先将根节点放到队列中,当队列不为空时,则在队列取出一个节点,并将其子节点添加到队列中。
使用队列十分重要,如果使用 Vector,List,Array 的话,我们删除元素需要 O(n)O(n) 的时间复杂度。而队列删除元素只需要 O(1)O(1) 的时间。
BFS
复杂度分析
时间复杂度:O(n)O(n)。nn 指的是节点的数量。
空间复杂度:O(n)O(n)。
作者:yang-zi-ju-2
链接:https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal/solution/c-bfs-by-yang-zi-ju-2/
/*
// 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) {
if(!root) return {};
vector<vector<int>> ans;
queue<Node*> que;
que.push(root);
while(!que.empty())
{
vector<int> v;
for(int i=que.size();i;i--)
{
//压入当前层
Node* curr=que.front();
que.pop();
v.push_back(curr->val);
for(Node* it:curr->children)
que.push(it);
}
ans.push_back(v);
}
return ans;
}
};