题目链接:https://leetcode-cn.com/problems/unique-binary-search-trees/
题目描述:
题解:
1.有一个节点时:dp[1] = 1;
2.有两个节点时:dp[2] = dp[0] * dp[1] + dp[1] * dp[0]; //左子树0个节点右子树1个节点 + 左子树1个节点右子树0个节点
3.有三个节点时:dp[3] = dp[0] * dp[2] + dp[1] * dp[1] + dp[2] * dp[0]; //左子树0个节点右子树2个节点 + 左子树1个节点右子树1个节点 + 左子树2个节点*右子树0个节点
class Solution {
public:
int numTrees(int n) {
//dp[i]: 节点值从1到i互不相同的二叉搜索树的个数
vector<int> dp(n + 1, 0);
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];
}
};