95.不同的二叉搜索树II
95.不同的二叉搜索树II
题解
二叉搜索树就是左子树的值比根小,右子树比根。
这一题给出1-n,问节点1-n,问可以构造多少种不同的树,通过二叉搜索树的性质,可以把构造树变成构造左右子树,那么左右子树又可以继续递归。
代码
package main
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func generateTrees(n int) []*TreeNode {
if n == 0 {
return nil
}
return generate(1, n)
}
func generate(start, end int) []*TreeNode {
if start > end {
return []*TreeNode{nil}
}
var ans []*TreeNode
for i := start; i <= end; i++ {
left := generate(start, i-1)
right := generate(i+1, end)
for _, leftTree := range left {
for _, rightTree := range right {
root := &TreeNode{Val: i}
root.Left = leftTree
root.Right = rightTree
ans = append(ans, root)
}
}
}
return ans
}