题目
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
样例
- 树的高度不会超过 1000
- 树的节点总数在 [0, 10^4] 之间
输入:root = [1,null,3,2,4,null,5,6]
输出:[[1],[3,2,4],[5,6]]
输入: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]
输出:[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]
思路
维护一个含每层节点的切片
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
func levelOrder(root *Node) [][]int { if root==nil{ return nil } queue := []*Node{root} ans := [][]int{}
for len(queue)!=0{ qLen := len(queue) levelQueue := []int{} for i:=0;i<qLen;i++{ node := queue[0] queue = queue[1:] levelQueue = append(levelQueue,node.Val) for _,child := range node.Children{ queue = append(queue,child) } } ans = append(ans,levelQueue) } return ans }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| func levelOrder(root *Node) [][]int { if root==nil{ return nil } queue := []*Node{root} ans := [][]int{}
for len(queue)!=0{ tmp := queue levelQueue := []int{} queue = nil for _,node := range tmp{ levelQueue = append(levelQueue,node.Val) queue = append(queue,node.Children...) } ans = append(ans,levelQueue) } return ans }
|