题目描述
给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?
C++
class Solution {
public:
/*
动态规划:
注意是二叉搜索树。dp[n]表示n个节点组成的二叉搜索树个数。
设f(i)为以i为根节点的二叉树的个数
dp[n]=f(1)+f(2)+f(3)+。。。。+f(n)
对于1,2,3,..,n,以m为根节点,dp[m]=(m-1个节点组成的子树个数)*(n-m个节点组成的子树个数)
因此:f(m)=dp[m-1]*dp[n-i]
*/
int numTrees(int n) {
vector<int> dp(n+1);
dp[0]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
dp[i]+=dp[j-1]*dp[i-j];
return dp[n];
}
};