题目:96. 不同的二叉搜索树
思路
动态规划
f[i]:有i个结点有多少种二叉搜索树
状态转移方程:
以n=3为例:

以1为头节点,左子树有0个结点,右子树有2个结点;
以2为头节点,左子树有1个结点,右子树有1个结点;
以3为头节点,左子树有2个结点,右子树有0个结点;
代码
我写的
可能逻辑不通顺,毕竟是直接上手调试的;
// f[i] : 由i个结点组成的blabla有多少种
// f[i] = f[]
class Solution {
public:
int numTrees(int n) {
int f[25] = {0};
int i, j;
f[0] = 1;
f[1] = 1;
// f[2] = 2;
// f[3] = 5;
for(i = 2; i <= n; i++)
{
for(j = 0; j < i; j++)
{
f[i] += f[j] * f[i-j-1];
}
// 左子树有 i-1 个,右子树有 j-i 个;
}
return f[n];
}
};
代码随想录
class Solution {
public:
int numTrees(int n) {
int i, j;
int f[25] = {0};
f[0] = 1;
for(i = 1; i <= n; i++)
{
// 谁做头节点
for(j = 1; j <= i; j++)
{
// 左子树有 j-1 个结点, 右子树有 i-j 个结点
f[i] += f[j-1] * f[i-j];
}
}
return f[n];
}
};


![61、内蒙古工业大学、内蒙科学技术研究院:CBAM-CNN用于SSVEP - BCI的分类方法[脑机二区还是好发的]](https://img-blog.csdnimg.cn/direct/2bc65a9d10a542f48b141cfe6a0530dd.png)
















