用python写一段代码:给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3 输出:5 示例 2: 输入:n = 1 输出:1 提示: 1 <= n <= 19 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/unique-binary-search-trees 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution: def numTrees(self, n: int) -> int:
时间: 2023-11-22 19:52:05 浏览: 127
py代码-例2-1-3 输入两个整数,输出较大的一个
```python
class Solution:
def numTrees(self, n: int) -> int:
dp = [0] * (n+1)
dp[0] = 1
for i in range(1, n+1):
for j in range(1, i+1):
dp[i] += dp[j-1] * dp[i-j]
return dp[n]
```
这道题可以使用动态规划来解决。我们定义 $dp[i]$ 表示由 $i$ 个节点组成的二叉搜索树的种数。我们可以从 $dp[0]$ 开始计算,因为空树也是一棵二叉搜索树,所以 $dp[0]=1$。
接下来考虑有 $1$ 到 $n$ 共 $n$ 个节点的情况。假设 $j$ 是根节点的值,那么它的左子树中有 $j-1$ 个节点,右子树中有 $i-j$ 个节点。那么对于以 $j$ 为根节点的二叉搜索树,它的种数就是左子树的种数乘以右子树的种数。因为左右子树的节点数是相互独立的,所以我们可以将这些情况累加起来得到 $dp[i]$ 的值。
最后返回 $dp[n]$ 即可。
阅读全文