题目为 给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?
思路为 动态规划,分别让每个节点当父节点,将左右再继续递归。最终结果就是左侧乘以右侧。
代码如下
public int NumTrees(int n)
{
if (n == 0)
{
return 1;
}
if (n < 3)
{
return n;
}
int res = 0;
for (int i = 0; i < n; i++)
{
res += NumTrees(i) * NumTrees(n - i - 1);
}
return res;
}