96. 不同的二叉搜索树
class Solution {
public:
int numTrees(int n) {
int dp[30]={0};
//由i个结点组成的二叉搜索树有多少种
dp[0]=1;
for(int i=1;i<=n;i++)
for(int j=0;j<i;j++)
//j表示根节点左子树有j个结点
dp[i]+=dp[j]*dp[i-j-1];
//对根节点左右子树结点数量遍历
//数量有左子树的数量*右子树的数量即可,累加和
//左子树为0时也有数值所以dp[0]为1
return dp[n];
}
};