題目:
給定一個整數 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;
}
};