不同的二叉搜索树(卡塔兰数)

// 动态规划
// 1 2 3 4 5 6 7
// 假设选取 4 为根节点,存在不同搜索二叉树的个数为:(1 2 3)能构成不同搜索二叉树的个数 * (5 6 7)能构成不同搜索二叉树的个数
// 卡塔兰数递推式↓
// h(n) = h(0) * h(n-1) + h(1) * h(n-2) + ... + h(n-1) * h(0) (n≥2)
class Solution {
public int numTrees(int n) {
int[] dp = new int[n + 1];
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= n; ++i) {
for (int j = 1; j <= i; ++j) {
dp[i] += dp[j - 1] * dp[i - j];
}
}
return dp[n];
}
}
这篇博客探讨了如何使用动态规划方法解决计算不同二叉搜索树(BST)的数量问题。通过卡塔兰数的递推公式,博主展示了如何实现一个Java程序来计算给定节点数的BST组合。该算法涉及将问题拆分为子问题并计算它们的乘积,从而有效地求解复杂度较高的问题。
660

被折叠的 条评论
为什么被折叠?



