题目描述:
给你一个整数 n
,求恰由 n
个节点组成且节点值从 1
到 n
互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例 1:
输入:n = 3 输出:5
示例 2:
输入:n = 1 输出:1
提示:
1 <= n <= 19
我的作答:
思路是dp数组的每个元素i表示,i个不同元素组成的二叉搜索树数量;以dp[3]为例:
有dp[0]*dp[3],dp[1]*dp[2],dp[2]*dp[1],dp[3]*dp[0]四种情况,*左边为左子树,右边为右子树;因此可以得到递归公式dp[i] += dp[j-1]*dp[i-j]两层for循环,至于为什么是j-1,因为j-1+i-j=i-1,而dp[i]=dp[i]+dp[i-1],完成递归
初始化,因为一切都从dp[0]开始,所以dp[0]不能为0,设置为1,空结点也可以是树;
python">class Solution(object):def numTrees(self, n):""":type n: int:rtype: int"""if n==0: return 1dp = [0]*(n+1)dp[0] = 1 #初始化for i in range(1, n+1): #从1到nfor j in range(1, i+1): #从1到idp[i] += dp[j-1]*dp[i-j]return dp[n]
参考:
差不多