题面
给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?
解析
Catalan
数求方案数问题,可以使用公式法或者递推求解,递推公式为
f
(
i
)
=
∑
j
=
1
i
f
(
j
−
1
)
×
f
(
i
−
j
)
f(i)=\sum_{j=1}^i f(j-1)\times f(i-j)
f(i)=j=1∑if(j−1)×f(i−j)
AC代码
class Solution {
public:
int numTrees(int n) {
vector<int> f(n+1);
f[0]=1;
for(int i=1; i<=n; ++i)
for(int j=1; j<=i; ++j)
f[i]+=f[j-1]*f[i-j];
return f[n];
}
};