如果n个顶点的键不同于Catalan number给出的BST的数量。但是,如果某些元素重复,我们如何计算BST的数量?
我天真的想法,如果我们在n中有k个相等的元素,那么我们应该在k上划分加泰罗尼亚数字!(k个元素的排列)。但是如果我们在最简单的例子(BST建立在[1,1,1]上)检查它,我们就会意识到这是错误的想法。
那么当我们计算BST的数量时,我们应该如何考虑重复的密钥?
我的问题中的BST是什么:二进制树,其中左子节点中的所有键少于root子节点,右子节点中所有键都比root用户更重要或等于。
答案 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)方法可以生成树。