96.不同的二叉搜索树

不同的二叉搜索树

给你一个整数 n,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

示例 1:

输入:n = 3
输出:5

示例 2:

输入:n = 1
输出:1

提示:

  • 1 <= n <= 19

解析

卡特兰数:G(n) = Σ G(i-1) * G(n-i),其中 i 从 1 到 n。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* @param {number} n
* @return {number}
*/
var numTrees = function (n) {
const dp = new Array(n + 1).fill(0);
dp[0] = 1;
dp[1] = 1;

for (let i = 2; i <= n; i++) {
for (let j = 1; j <= i; j++) {
dp[i] += dp[j - 1] * dp[i - j];
}
}
return dp[n];
};

以 j 为根节点时,左子树有 j-1 个节点,右子树有 i-j 个节点,两者的组合数相乘。这就是卡特兰数的递推公式。


96.不同的二叉搜索树
https://leetcode.lz5z.com/96.unique-binary-search-trees/
作者
tickli
发布于
2024年1月31日
许可协议