背景

在leetcode上写代码时,二叉树是提前构建好的
例如这样,他给你传进去一个头结点指针
但是在本地不好调试,相信有不少伙伴也会有这个疑问

代码

type TreeNode struct {
    Val   int
    Left  *TreeNode
    Right *TreeNode
}
// BFS的数组翻译为二叉树
func createTreeNode(nums []int) *TreeNode {
    var root *TreeNode
    var queue []*TreeNode
    for i := 0; i < len(nums); i += 2 {
        if i == 0 {
            root = &TreeNode{Val: nums[i]}
            queue = append(queue, root)
        }
        // 其实就是lis.Remove(lis.Front()),pop掉队列首元素
        parentNode := queue[0]
        queue = queue[1:]
        // 添加左节点
        if i+1 < len(nums) && nums[i+1] != -1 {
            parentNode.Left = &TreeNode{Val: nums[i+1]}
            // 在队尾添加
            queue = append(queue, parentNode.Left)
        }
        // 添加右节点, 如果-1, 那么说明没有这个分支
        if i+2 < len(nums) && nums[i+2] != -1 {
            parentNode.Right = &TreeNode{Val: nums[i+2]}
            queue = append(queue, parentNode.Right)
        }
    }
    return root
}

func createTreeNode2(nums []int) *TreeNode {
    var root *TreeNode
    quene := list.New()
    for i := 0; i < len(nums); i += 2 {
        if i == 0 {
            root = &TreeNode{Val: nums[i]}
            quene.PushBack(root)
        }
        //parentNode := quene.Front()
        parentNode := quene.Remove(quene.Front()).(*TreeNode)
        // 添加左节点
        if i+1 < len(nums) && nums[i+1] != -1 {
            parentNode.Left = &TreeNode{Val: nums[i+1]}
            quene.PushBack(parentNode.Left)
        }
        // 添加右节点
        if i+2 < len(nums) && nums[i+2] != -1 {
            parentNode.Right = &TreeNode{Val: nums[i+2]}
            quene.PushBack(parentNode.Right)
        }
    }
    return root
}

// 递归
func (node *TreeNode) New(index int, data []int) *TreeNode {
    if node == nil {
        return nil
    }
    bin := &TreeNode{data[index], nil, nil}
    // 设置完全二叉树左节点  其特征是深度 *2+1为左节点  +2为右节点
    if index < len(data) && 2*index+1 < len(data) {
        fmt.Println()
        bin.Left = bin.New(index*2+1, data)
    }
    if i < len(data) && 2*index+2 < len(data) {
        bin.Right = bin.New(index*2+2, data)
    }
    return bin
}
分类: 算法

站点统计

  • 文章总数:314 篇
  • 分类总数:19 个
  • 标签总数:193 个
  • 运行天数:1111 天
  • 访问总数:287089 人次

浙公网安备33011302000604

辽ICP备20003309号