分治
95. Unique Binary Search Trees II (Medium)
给定一个数字 n,要求生成所有值为 1...n 的二叉搜索树。
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def generateTrees(self, n: int) -> List[TreeNode]:
if n < 1:
return [None,]
def generateSubTree(s, e):
if s > e:
return [None,]
res = []
for i in range(s, e+1):
leftSubTree = generateSubTree(s, i-1)
rightSubTree = generateSubTree(i+1, e)
for l in leftSubTree:
for r in rightSubTree:
root = TreeNode(i)
root.left = l
root.right = r
res.append(root)
return res
return generateSubTree(1, n)