题目链接:https://leetcode-cn.com/problems/unique-binary-search-trees/
题意: 给你一个整数
n
,求恰由n
个节点组成且节点值从1
到n
互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
方法:动态规划,存储状态
class Solution {
public:
int numTrees(int n) {
vector<int> dp(n+1,0);//动态规划数组,dp[i]表示有i个节点,dp[i]种二叉搜索树
dp[1] = 1;//定义初始状态
for(int i=2;i<=n;i++)//更新每种dp值
{
for(int j=1;j<=i;j++)
{
if(j==1||j==i)//当以1或者最后一个节点作为根节点时,需要加上dp[i-1],相当于固定了其中一个节点,然后加上dp[i-1]的情况
{
dp[i]+=dp[i-1];
}else//否则的话就是左右子树的情况的乘积
{
dp[i]+=dp[j-1]*dp[i-j];
}
}
}
return dp[n];//返回前n个节点有dp[n]种二叉搜索树
}
};