题目:
给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 **。可以按 任意顺序 返回答案。
算法:
方法一:分治思想
func generateTrees(n int) []*TreeNode {
return doGenerate(1, n)
}
func doGenerate(start, end int) []*TreeNode {
if start > end {
// 这里不能返回nil,否则遍历leftTrees/rightTrees为空时,不会生成BST数
return []*TreeNode{nil}
}
allTrees := make([]*TreeNode, 0)
for i := start; i <= end; i ++ {
leftTrees := doGenerate(start, i - 1)
rightTrees := doGenerate(i + 1, end)
for _, left := range leftTrees {
for _, right := range rightTrees {
node := &TreeNode{i, left, right}
allTrees = append(allTrees, node)
}
}
}
return allTrees
}