用python写一段代码:给你一个整数 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 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/unique-binary-search-trees-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution: def generateTrees(self, n: int) -> List[Optional[TreeNode]]:
时间: 2023-07-02 12:03:54 浏览: 138
以下是符合要求的代码:
```python
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[Optional[TreeNode]]:
if n == 0:
return []
return self.generate_trees(1, n)
def generate_trees(self, start, end):
if start > end:
return [None]
res = []
for i in range(start, end+1):
left_trees = self.generate_trees(start, i-1)
right_trees = self.generate_trees(i+1, end)
for left in left_trees:
for right in right_trees:
root = TreeNode(i)
root.left = left
root.right = right
res.append(root)
return res
```
该代码使用递归方式生成所有可能的二叉搜索树。首先,如果 n 为 0,则返回一个空列表;否则,调用 `generate_trees` 函数,从 1 到 n 生成所有可能的二叉搜索树。
`generate_trees` 函数是核心部分,它通过递归方式将问题分解为更小的子问题。对于每个区间 [start, end],我们枚举其中的每个节点 i,然后递归生成左区间和右区间的所有可能的二叉搜索树。最后,我们将每个左子树和右子树与当前节点 i 组合起来,形成一棵新的二叉搜索树。将生成的所有二叉搜索树添加到结果列表中,并返回该列表。
阅读全文