BST重复的情况如何?

时间:2010-03-30 21:02:46

标签: binary-search

如何解决二进制搜索树中的重复问题?

2 个答案:

答案 0 :(得分:1)

我不确定你在问什么。但这并不能阻止我发布答案。

通常,BST中不允许使用重复的密钥。这往往会使事情变得更容易,而且这是一个容易避免的条件。

如果您确实想要允许重复,那么插入不是问题。您可以将其粘贴在左子树或右子树中。

问题在于,如果它是像AVL树或红黑树这样的自平衡树,则不能指望特定端的重复项。看起来这可能是删除的一个问题,但我曾经实现过一个AVL树,它没有对重复项做任何特殊规定,而且它根本没有问题。

从AVL树中删除节点涉及(1)找到节点,(2)用左子树中的最大键或右子树中的最小键替换该节点,然后递归删除该节点。如果没有子树,那么就不需要做任何事了。

实际上,删除具有重复项的节点意味着具有最接近根的搜索密钥的节点将被替换为某个节点,具有另一个密钥的节点或具有相同密钥的节点。无论哪种方式,都不会违反排序约束,一切都没有遇到麻烦。

我不知道红黑树或其他种类的BST。

答案 1 :(得分:0)

取决于您的比较检查:如果等于和小于等效,则重复项将放在“较小”节点中,否则它们将位于“较大”节点中。除此之外,不应该有重复的问题,除非你想要避免它们,在这种情况下你需要额外的相等检查。