LeetCode 热题 HOT 100之不同的二叉搜索树
题目96:给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
方案:发现规律,当i作为父节点时,f(i)=f(i-1)*f(n-i),想得到最终结果,只需要把1到n做父节点的情况累加,使用递归方法。
第二种方法是动态规划,建立一数组维护从0个数到n个数的所有结果。
//递归
class Solution {
public:
int numTrees(int n) {
if(n==0)return 1;
if(n==1)return 1;
if(n==2)return 2;
int ans=0;
for(int i=1;i<=n;i++){
ans+=(numTrees(i-1)*numTrees(n-i));
}
return ans;
}
};
动态规划:
class Solution {
public:
int numTrees(int n) {
vector<int>dp(n+1,0);
dp[0]=1;
dp[1]=1;
for(int i=2;i<n+1;i++){
for(int j=1;j<=i;j++){
dp[i]+=dp[j-1]*dp[i-j];
}
}
return dp[n];
}
};