给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?
leetcode
解题思路:利用动态规划的思想。从小到大遍历每个节点数量的情况。
- 首先是状态标识,利用里一个数组,标识不同节点数量下的情况。
- 然后是状态转移,在从头遍历到结尾,枚举每一个中间节点为根时的组合数量,再累加就是当前节点数量下的种类数量。
- 以当前节点为根的组合情况,自然时左树的数量与右树的数量之积。
class Solution {
public int numTrees(int n) {
if(n == 0) return 0;
int[] f = new int[n + 1];
f[0] = 1;
f[1] = 1;
for(int i = 2; i <= n; i++) {
for(int j = 1; j <= i; j++) {
f[i] += f[j - 1] * f[i - j];
}
}
return f[n];
}
}