题目描述
给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?
样例
输入: 3
输出: 5
解释:
给定 n = 3, 一共有 5 种不同结构的二叉搜索树:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
算法分析
核心思想:当给定的长度固定时,对应的二叉搜索树的情况数量也一定
时间复杂度 $O(n^2)$
Java 代码
class Solution {
public int numTrees(int n) {
int[] f = new int[n + 10];
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];
}
}
大佬,图片中好像是左边长度*右边长度