95. 不同的二叉搜索树 II
原始题目链接:https://leetcode-cn.com/problems/unique-binary-search-trees-ii/
给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。
解题思路:
回溯法,定义一个函数:G(s, e)函数表示当前值的集合为[start,end],返回序列[start,end]生成的所有可行的二叉搜索树,枚举 [start,end] 中的值 i 为当前二叉搜索树的根,序列就被i分成了左右2部分(start,i-1)(i+1,end),然后递归调用这两部分,获得以i为根的左右两个子二叉树搜索树的结果集合,再从左右两个结果集合中分别抽出一个结果进行拼接,形成当前i为根的所有二叉搜索树的结果。具体实现看代码及注释。
代码实现:
class Solution:
def generateTrees(self, n: int) -> List[TreeNode]:
def G(s, e):
if s > e:
return [None, ]
res = []
for i in range(s, e + 1):
left = G(s, i - 1)
right = G(i + 1, e)
for l in left:
for r in right:
t = TreeNode(i)
t.left = l
t.right = r
res.append(t)
return res
return G(1, n) if n else []
参考文献: https://leetcode-cn.com/problems/unique-binary-search-trees-ii/solution/bu-tong-de-er-cha-sou-suo-shu-ii-by-leetcode-solut/
|