给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?
示例:
输入: 3
输出: 5
解释:
给定 n = 3, 一共有 5 种不同结构的二叉搜索树
来源:leetcode
知识点:
- 卡特兰数:卡特兰树是满足 C n + 1 = C 0 C n + C 1 C n − 1 + . . . + C n C 0 C_{n+1} = C_0C_n + C_1C_{n-1} + ... + C_{n}C_{0} Cn+1=C0Cn+C1Cn−1+...+CnC0 递推关系的数。
简要思路:通过计算卡特兰数可得到答案。
代码:
class Solution {
public int numTrees(int n) {
if(n < 0) return 0;
int[] res = new int[n+1];
res[0] = 1;
for (int i=1; i<=n; i++){
for (int j=0; j<i; j++){
res[i] += res[j] * res[i-1-j];
}
}
return res[n];
}
}
数学牛逼!!!