# [LeetCode 429. N-ary Tree Level Order Traversal ](https://leetcode.com/explore/challenge/card/august-leetcoding-challenge-2021/613/week-1-august-1st-august-7th/3871/)
### Daily challenge Aug 6, 2021 (MEDAIN)
>Given an n-ary tree, return the level order traversal of its nodes' values.
>
>Nary-Tree input serialization is represented in their level order traversal, each group of children is separated by the null value (See examples).

:::info
**Example 1:**
**Input:** root = [1,null,3,2,4,null,5,6]
**Output:** [[1],[3,2,4],[5,6]]
:::

:::info
**Example 2:**
**Input:** root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
**Output:** [[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]
:::
:::warning
**Constraints:**
* The height of the n-ary tree is less than or equal to 1000
* The total number of nodes is between [0, 104]
:::
---
### Approach 1 : queue
**` 24ms ( 52.46% )`** **`O()`**
* **`size`** 表示當前 `level` 的 `node` 數量。
**`queue<Node*> order`** 用來紀錄每層 `level` 的 `node`。
**`vector<int> list`** 紀錄當前 `level` 的 `node->val`。
1. 從 `order` 中 `pop` 出元素 `size` 次 ( 遍歷所有當前 `level` 的 `node` ),
同時將 `node->val` 存入 `list`。
2. 再將當前 `node` 內的所有 `children` 存入 `order` 中。
3. 重複直到 `order` 為空。
```cpp=1
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
vector<vector<int>> ans;
if(root == NULL) return ans;
queue<Node*> order;
order.push(root);
while(!order.empty()){
int size = order.size();
vector<int> list;
for(int i=0; i<size; i++){
Node* cur_node = order.front();
order.pop();
list.push_back(cur_node->val);
for(auto child : cur_node->children){
order.push(child);
}
}
ans.push_back(list);
}
return ans;
}
};
/*
// 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;
}
};
*/
```