---
# System prepended metadata

title: '[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/)'

---

# [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).

![](https://i.imgur.com/fERUWjV.png)
:::info
**Example 1:**
**Input:** root = [1,null,3,2,4,null,5,6]
**Output:** [[1],[3,2,4],[5,6]]
:::

![](https://i.imgur.com/XmQs79B.png)
:::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;
    }
};
*/
```