【发布时间】:2013-04-14 21:45:57
【问题描述】:
可以从 n 个不同的元素构造多少个二叉搜索树?我们怎样才能找到一个经过数学证明的公式呢?
示例: 如果我们有 3 个不同的元素,比如 1、2、3,那么 是 5 棵二叉搜索树。
【问题讨论】:
-
可能是related。
标签: algorithm math binary-tree binary-search-tree proof
可以从 n 个不同的元素构造多少个二叉搜索树?我们怎样才能找到一个经过数学证明的公式呢?
示例: 如果我们有 3 个不同的元素,比如 1、2、3,那么 是 5 棵二叉搜索树。
【问题讨论】:
标签: algorithm math binary-tree binary-search-tree proof
给定 n 个元素,可以从这些元素生成的二叉搜索树的数量由第 n 个Catalan number 给出(表示为 Cn)。这等于
直观地说,加泰罗尼亚数字表示您可以通过以下方式创建由 n 个元素组成的结构的方法数量:
此模式与您从一组 n 个元素构建 BST 的方式完美匹配。选择一个元素作为树的根。所有较小的元素必须向左,所有较大的元素必须向右。从那里,您可以从左侧和右侧的元素构建更小的 BST,然后将它们与根节点融合在一起以形成整体 BST。 Cn 给出了对 n 个元素执行此操作的方法数,因此可能的 BST 数由第 n 个加泰罗尼亚数给出。
希望这会有所帮助!
【讨论】:
我确信这个问题不仅仅是使用数学公式来计算。我花了一些时间编写了程序以及计算背后的解释或想法。
我尝试使用递归和动态编程来解决它。希望这会有所帮助。
公式已经存在于上一个答案中:
因此,如果您有兴趣学习解决方案并了解方法,您可以随时查看我的文章Count Binary Search Trees created from N unique elements
【讨论】:
令 T(n) 为 n 个元素的 bst 数。
给定 n 个不同的有序元素,编号为 1 到 n,我们选择 i 作为根。
对于 T(i-1) 个组合,左子树中的 (1..i-1) 和 T(n-i) 组合的右子树中的 (i+1..n)。
因此:
T(n) = sum_i=1^n(T(i-1) * T(n-i))
当然还有 T(1) = 1
【讨论】: