构造唯一的二叉搜索树

时间:2015-07-02 15:05:58

标签: algorithm tree dynamic-programming

我正在研究算法问题。给定n,生成存储值1 ... n的所有结构上唯一的二叉搜索树。解决方案是枚举序列中的每个数字i,并使用数字作为根,左侧的子序列1 ...(i-1)将位于根的左侧分支,类似地右侧子序列(i) +1)... n躺在根的右侧分支上。然后递归地从子序列构造子树。这种方法确保构建的BST都是唯一的,因为它们具有独特的根源。

现在我的问题是:如果树不限于二叉搜索树,如果它可以是任何二叉树,该怎么办?解决方案将如何?我仍然想用root i来回顾所有的情况,其中i = 1,... n。左子树不必在1 ...(i-1)的范围内,右子树不必在(i + 1)... n的范围内。但那么如何安排呢?创建(i-1)元素的任意子集并应用??

2 个答案:

答案 0 :(得分:3)

假设您遇到以下问题:给定n个磁盘,将它们排列成唯一的二叉树形状。然后,按照问题中的正确推理,您可以说出以下内容:我将对磁盘1,2,3,...,n进行编号;然后我将(递归地)构建其根位于磁盘#1,然后是磁盘#2等的树。

因此,您(正确地)找到的树根图也确实与节点中的内容无关,更不用说内容是否满足BST不变量的问题。鉴于你的问题,

  1. 如果问题是存在多少有根图,那就和以前一样。
  2. 如果问题是有根有图有多少组合+节点内容,那么你就像你所做的那样枚举有根图,并且,对于每一个,列举1,2,...的排列。 .. n。

    如果是这种情况,并且您不需要枚举,而是近似这些树的数量,那么请注意,这是 n!乘以Catalan Numbers

答案 1 :(得分:2)

将您的算法用于BST。这会产生独特的树木形状。形状是唯一的,因为对于每个根n,左子树中有n-1个元素,其余的在右边。

然后,对于每个形状,都有n!元素的排序。这给出了任意树的结果。

相关问题