在二叉搜索树中处理相同的数据

时间:2012-08-10 16:02:16

标签: java data-structures binary-tree binary-search-tree

我正在教自己的数据结构,我目前正在研究二叉搜索树。我很好奇如果您有相同的数据,您将如何排序树。例如,假设我的数据包含[4,6,2,8,4,5,7,3]

  1. 我将4设为根元素
  2. 将6放在右边
  3. 将4放在左边4
  4. 将8放在6的右边
  5. 然后我到4,自4=4以来我把它放在哪里?在左边还是右边?

    选项#1 option 1

    选项#2 option 2

    其中一个是正确还是两个都错了?如果它们都错了,你能告诉我它们应该如何分类。谢谢!

2 个答案:

答案 0 :(得分:2)

通常二叉树不允许数据重复。如果您进行自定义实现,则可以存储元素数。 Java中的TreeSet就是一个例子 - 它只包含唯一的元素。

实际上你列出的案例打破了树的整个结构。搜索操作现在看起来很奇怪,无法使用 O(ln n)执行。在最坏的情况下,它将采用 O(n),因此您将失去此数据结构的所有好处。

答案 1 :(得分:0)

如果这是一个排序树,那么无论哪种方式,你所拥有的都可以正常工作;最后,你将进行树木行走并转储数据。

如果这是一个搜索树,那么我只会在遇到它时丢弃额外的(冗余)数据; “它存在”。你确实说过这是一个搜索树,虽然并不理想,但它实际上并没有被破坏 - 如果你搜索“4”,你只需要捕获根节点(在这种情况下),并且永远不要在它下面看到任何其他“4”。这不是最佳的,有额外的#s。

无论您选择哪种方式,都会出现最佳情况和最坏情况;不要过分担心左/右决策 - 通常无所谓。如果您已经掌握了已知数据流中的详细信息,那么您将能够针对该特定案例做出最佳决策。