leetcode算法练习——不同的二叉搜索树
程序员文章站
2022-07-15 11:58:59
...
题目:
给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?
示例:
代码如下:
长度为n的序列的不同二叉搜索树个数C(n)为卡塔兰数。
首先,设长度为,数作为根时,二叉搜索树的个数为
则=
当数作为根时,到和到分别构成的左子树和右子树。
且到构成的左子树数量可以用表示,到构成的右子树数量可以用表示。
因为长度为n的序列构成的二叉搜索树的数量只与序列长度有关,与序列里数的大小无关。
则=
所以可以写成=
这是卡塔兰数的形式。
特殊情况:,
class Solution {
public:
int numTrees(int n)
{
if (n==0) return 1;
long C = 1;
for(int i=1;i<=n;i++)
{
C = C*(4*i-2)/(i+1);
}
return C;
}
};
运行结果:
上一篇: list stream:List转Map