95.不同的二叉搜索树 II

72 阅读1分钟

题目:
给你一个整数 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
}