广度优先搜索(层序遍历)

将一个二叉树层序遍历

思路:使用一个辅助队列

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
}
posted @ 2021-03-12 14:59  爱晒太阳的懒猫。。  阅读(91)  评论(0编辑  收藏  举报