Files
2021-08-08 22:44:30 +08:00

85 lines
2.0 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# [429. N-ary Tree Level Order Traversal](https://leetcode.com/problems/n-ary-tree-level-order-traversal/)
## 题目
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).*
**Example 1:**
![https://assets.leetcode.com/uploads/2018/10/12/narytreeexample.png](https://assets.leetcode.com/uploads/2018/10/12/narytreeexample.png)
```
Input: root = [1,null,3,2,4,null,5,6]
Output: [[1],[3,2,4],[5,6]]
```
**Example 2:**
![https://assets.leetcode.com/uploads/2019/11/08/sample_4_964.png](https://assets.leetcode.com/uploads/2019/11/08/sample_4_964.png)
```
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]]
```
**Constraints:**
- The height of the n-ary tree is less than or equal to `1000`
- The total number of nodes is between `[0, 104]`
## 题目大意
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
## 解题思路
- 这是 n 叉树的系列题,第 589 题也是这一系列的题目。这一题思路不难,既然是层序遍历,用 BFS 解答。
## 代码
```go
package leetcode
/**
* Definition for a Node.
* type Node struct {
* Val int
* Children []*Node
* }
*/
type Node struct {
Val int
Children []*Node
}
func levelOrder(root *Node) [][]int {
var res [][]int
var temp []int
if root == nil {
return res
}
queue := []*Node{root, nil}
for len(queue) > 1 {
node := queue[0]
queue = queue[1:]
if node == nil {
queue = append(queue, nil)
res = append(res, temp)
temp = []int{}
} else {
temp = append(temp, node.Val)
if len(node.Children) > 0 {
queue = append(queue, node.Children...)
}
}
}
res = append(res, temp)
return res
}
```