博客主页:🏆看看是李XX还是李歘歘 🏆

🌺每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点,以及职场小菜鸡的生活。🌺

💗点关注不迷路,总有一些📖知识点📖是你想要的💗

⛽️今天的内容是    429. N 叉树的层序遍历     ⛽️💻💻💻


429. N 叉树的层序遍历​

 给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。

树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。

示例 1:

429. N 叉树的层序遍历、Leetcode的Go实现_叉树

输入:root = [1,null,3,2,4,null,5,6]
输出:[[1],[3,2,4],[5,6]]

示例 2:

429. N 叉树的层序遍历、Leetcode的Go实现_算法_02

输入: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]]

提示:

树的高度不会超过 1000
树的节点总数在 [0, 10^4] 之间

递归:

/**
* Definition for a Node.
* type Node struct {
* Val int
* Children []*Node
* }
*/
var res [][]int
func levelOrder(root *Node) [][]int {
res = make([][]int, 0)
if root == nil {
return res
}
lcc(root, 0)
return res
}

func lcc(root *Node,level int) {
if root==nil {
return
}
// res层级初始化(未初始化不能进行下标赋值)
if level==len(res) {
res = append(res,[]int{})
}
res[level] = append(res[level],root.Val)
for i := 0; i < len(root.Children); i++ {
lcc(root.Children[i], level+1)
}
}

迭代:

/**
* Definition for a Node.
* type Node struct {
* Val int
* Children []*Node
* }
*/
func levelOrder(root *Node) [][]int {
//使用队列进行解决
result := make([][]int,0)
if root==nil{
return result
}
queue := []*Node{root} //声明队列
for len(queue)>0 {
level :=make([]int,0) //存储本层的值
currentQueue := queue[:] //将队列元素取出来,方便下面遍历
queue = make([]*Node,0 ) //清空队列
for _,value := range currentQueue { //遍历队列
level = append(level,value.Val) //将本层的值存起来
queue=append(queue,value.Children...)
}
result = append(result, level)
}
return result
}

429. N 叉树的层序遍历、Leetcode的Go实现_leetcode_03