不同的二叉搜索树 II golang

95 不同的二叉搜索树 II
在这里插入图片描述
Solution

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func generateTrees(n int) []*TreeNode {
    var arr []int
    i :=1
    for i <= n {
        arr = append(arr,i)
        i++
    }
    return builder(arr)
}

func builder(arr []int) []*TreeNode {
    var nodes []*TreeNode
    if len(arr)==0{
      return []*TreeNode{nil}
    }
//     if len(arr)==1{
//        nodes = append(nodes,&TreeNode{arr[0],nil,nil})
//        return nodes
//    }
    i :=0
    for ;i<len(arr);i++{
        leftNodes :=builder(arr[:i])
        rightNodes :=builder(arr[i+1:])
        //if i == len(arr)-1 {
         //   rightNodes = []*TreeNode{nil}
       // }
        for _,v :=range leftNodes{
            for _,vr :=range rightNodes{
                node :=&TreeNode{arr[i],v,vr}
                nodes = append(nodes,node)
            }
        }
    }
    return nodes
}

官方解答

func generateTrees(n int) []*TreeNode {
    if n == 0 {
        return nil
    }
    return helper(1, n)
}

func helper(start, end int) []*TreeNode {
    if start > end {
        return []*TreeNode{nil}
    }
    allTrees := []*TreeNode{}
    // 枚举可行根节点
    for i := start; i <= end; i++ {
        // 获得所有可行的左子树集合
        leftTrees := helper(start, i - 1)
        // 获得所有可行的右子树集合
        rightTrees := helper(i + 1, end)
        // 从左子树集合中选出一棵左子树,从右子树集合中选出一棵右子树,拼接到根节点上
        for _, left := range leftTrees {
            for _, right := range rightTrees {
                currTree := &TreeNode{i, nil, nil}
                currTree.Left = left
                currTree.Right = right
                allTrees = append(allTrees, currTree)
            }
        }
    }
    return allTrees
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值