Algorithm 构造唯一二叉搜索树

Algorithm 构造唯一二叉搜索树,algorithm,tree,dynamic-programming,Algorithm,Tree,Dynamic Programming,我正在研究一个算法问题。给定n,生成存储值1…n的所有结构唯一的二进制搜索树。解决方案是枚举序列中的每个数字i,并使用该数字作为根,其左侧的子序列1…(i-1)将位于根的左分支,类似地,右侧的子序列(i+1)…n位于根的右分支。然后从子序列递归地构造子树。这种方法确保构造的BST都是唯一的,因为它们有唯一的根 现在我的问题是:如果树不限于二叉搜索树,如果它可以是任何二叉树,该怎么办。解决办法是什么?我仍然想用根I检查所有情况,其中I=1。。。N左子树不必在1…(i-1)的范围内,右子树不必在(i

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


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

假设您遇到以下问题:给定n个磁盘,将它们排列成唯一的二叉树形状。然后,根据您在问题中的正确推理,您可以说:我将为磁盘1、2、3、…、n编号;然后我将(递归地)构建根位于磁盘1、磁盘2的树,以此类推

因此,您(正确地)发现的树根有向图实际上与节点中的内容无关,更不用说内容是否满足BST不变量的问题了。考虑到你的问题

  • 如果问题是有多少根有向图存在,那么它和以前一样
  • 如果问题是有多少根有向图+节点内容的组合,那么您只需像前面所做的那样枚举根有向图,并且,对于每一个有向图,枚举1,2。。。n

    如果是这种情况,您不需要枚举,而是近似计算此类树的数量,请注意这是n!乘以


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


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

    将其设置为二叉搜索树(或不设置二叉搜索树)不会影响这三个树中可能的结构,只会影响该结构节点中数据的顺序。因此,除非您以某种相当奇怪的方式定义“结构独特”,否则节点是否按BST排序没有区别。