要求
给你一个整数 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
核心代码
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 == 0:
return []
def generate(start,end):
trees = []
for root in range(start,end):
for left in generate(start,root):
for right in generate(root + 1,end):
node = TreeNode(root)
node.left = left
node.right = right
trees.append(node)
return trees or [None]
return generate(1,n+1)
解题思路:以每一个i都作一次根节点,i将数列分为两部分,(1,i-1)和(i+1, n),在前一个区间中让每个j都做一次根节点构成的树作为i的左子树,在后一个区间中让每个k都做一次根节点构成的树作为i的右子树,将所有的情况组合起来
来回只用到一个函数用来生成以i为根节点的树,递归调用即可,结束的条件就是没有节点可以生成,返回[None]