刷题使我快乐,满脸开心.jpg
- 来源:力扣(LeetCode)
- 链接:https://leetcode.cn/problems/unique-binary-search-trees-ii/
- 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目
给你一个整数 n
,请你生成并返回所有由 n
个节点组成且节点值从 1 到 n
互不相同的不同 二叉搜索树
。可以按 任意顺序
返回答案。
示例 1:
输入:n = 3
输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
示例 2:
输入:n = 1
输出:[[1]]
提示:
1 <= n <= 8
思路
递归思路,可以从1
到n
依次让它们作为根节点,然后递归去形成左右子树,拼接上之后返回结果集~
代码
/**
* 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}
}
if start == end {
return []*TreeNode{{Val: start}}
}
allTrees := make([]*TreeNode, 0)
for i := start; i <= end; i++ {
leftTrees := generate(start, i-1)
rightTrees := generate(i+1, end)
for _, left := range leftTrees {
for _, right := range rightTrees {
allTrees = append(allTrees, &TreeNode{
Val: i,
Left: left,
Right: right,
})
}
}
}
return allTrees
}