给你一个整数 n
,求恰由 n
个节点组成且节点值从 1
到 n
互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
思路:以n=3为例,当主节点为1时,左孩子无,右孩子有两个节点,于是为dp[0]*dp[2];
当主节点为2时,左右孩子都只有一个节点,dp[1]*dp[1];
当主节点为3时,右孩子无,左孩子有两个节点,于是dp[2]*dp[0]。最后将这些相加便是dp[3]。
class Solution {
public:
int numTrees(int n) {
vector<int> dp(n+1);
dp[0]=1;
dp[1]=1;
for(int i=2;i<=n;i++)
{
for(int j=0;j<i;j++)
{
dp[i]+=dp[j]*dp[i-j-1];
}
}
return dp[n];
}
};