具有重复键的BST数量

时间:2015-11-22 12:51:56

标签: algorithm math tree binary-search-tree dynamic-programming

如果n个顶点的键不同于Catalan number给出的BST的数量。但是,如果某些元素重复,我们如何计算BST的数量?

我天真的想法,如果我们在n中有k个相等的元素,那么我们应该在k上划分加泰罗尼亚数字!(k个元素的排列)。但是如果我们在最简单的例子(BST建立在[1,1,1]上)检查它,我们就会意识到这是错误的想法。

那么当我们计算BST的数量时,我们应该如何考虑重复的密钥?

我的问题中的BST是什么:二进制树,其中左子节点中的所有键少于root子节点,右子节点中所有键都比root用户更重要或等于。

1 个答案:

答案 0 :(得分:0)

重复的密钥对不同树的数量没有任何影响。每棵树都有一个独特的形状,所以你甚至不需要键来区分它们。你可以完全删除密钥,树木仍然会有所不同。

用你的简单例子来试试:[1,1,1]。您仍然可以使用这些键制作5个不同的BST:

    1      1      1      1      1  
   /      /      / \      \      \
  1      1      1   1      1      1
 /        \               /        \
1          1             1          1

编辑新要求:

如果左边的孩子必须严格小于他们的父母,那么重复的密钥就会形成一个链接列表,就像单个节点一样,因为你不能让任何左边的孩子进入。整个相等值列表只有一个形状,一个是左子,一个是右子:

    1
   / \
  0   1
       \
        1
         \
          2

因此,在这种情况下,您只需减去重复键的数量。

对于具有M个重复项的N个密钥,即N-M个唯一密钥,有一些加泰罗尼亚语(N-M)方法可以生成树。