Python程序:计算具有n个节点的BST数量
假设我们有n个不同的节点,所有节点都不同。我们必须找到有多少种方法可以将它们排列成二叉搜索树。众所周知,对于二叉搜索树,左子树总是保存较小的值,而右子树保存较大的值。
为了解决这个问题,我们将找到卡特兰数。卡特兰数C(n)表示具有n个不同键的二叉搜索树。公式如下:
$$C(n)=\frac{(2n)!}{(n+1)!\times n!}$$
因此,如果输入为n = 3,则输出为5,因为……
为了解决这个问题,我们将遵循以下步骤:
- 定义一个函数ncr()。这将需要n, r。
- res := 1
- 如果r > n - r,则
- r := n - r
- 对于i in range 0 to r - 1,执行:
- res := res *(n - i)
- res := floor of (res/(i + 1))
- 返回res
- 从主方法中执行以下操作:
- c := ncr(2 * n, n)
- 返回floor of c /(n + 1)
示例
让我们来看下面的实现以更好地理解:
from math import factorial def ncr(n, r): res = 1 if r > n - r: r = n - r for i in range(r): res *= (n - i) res //= (i + 1) return res def solve(n): c = ncr(2 * n, n) return c // (n + 1) n = 3 print(solve(n))
输入
3
输出
5
广告