广度优先搜索(层序遍历)
将一个二叉树层序遍历
思路:使用一个辅助队列
func levelOrder(root *TreeNode) [][]int {
var a [][]*TreeNode
var wd []*TreeNode//队列
//将切片中的循环叠加
if root == nil{
return [][]int{}
}
wd = append(wd , root)
a = append(a , wd)
for i := 0; i < len(a); i++ {
var kt []*TreeNode
for j := 0; j < len(a[i]); j++ { //一行的节点
kt = append(kt, mod(a[i][j])...)
}
if kt == nil {
continue
}
a = append(a, kt)
}
return vers(a)
}
//返回节点的孩子节点
func mod(r *TreeNode)[]*TreeNode{
var a []*TreeNode
if r == nil{
return a
}
if r.Left != nil && r.Right != nil{
a = append(a , r.Left)
a = append(a , r.Right)
}
if r.Left == nil && r.Right != nil{
a = append(a , r.Right)
}
if r.Left != nil && r.Right == nil{
a = append(a , r.Left)
}
return a
}
//返回节点->值
func vers(a [][]*TreeNode)[][]int{
//a存放的是每个节点所以需要转换成节点值
var cd [][]int
for i := 0; i < len(a); i++ {
var kt []int
for j := 0; j < len(a[i]); j++ { //一行的节点
kt = append(kt, a[i][j].Val)
}
cd = append(cd, kt)
}
return cd
}
静,静,静