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

Java 在二叉搜索树中处理相同的数据,java,data-structures,binary-tree,binary-search-tree,Java,Data Structures,Binary Tree,Binary Search Tree,我正在自学数据结构,目前正在研究二叉搜索树。我很好奇,如果你有相同的数据,你会如何对这棵树进行排序。例如,假设我的数据由[4,6,2,8,4,5,7,3]组成 我将4设置为根元素 把6放在右边 把2放在4的左边 把8放在6的右边 然后我得到4,既然4=4,我把它放在哪里?左边还是右边 选项1 选项2 其中一个是正确的还是两者都错了?如果他们都错了,你能告诉我应该如何分类吗。谢谢 如果这是一个排序树,那么无论哪种方式,您所拥有的都可以正常工作;最后,您将执行树漫游并转储数据 如果这是一个搜索树

我正在自学数据结构,目前正在研究二叉搜索树。我很好奇,如果你有相同的数据,你会如何对这棵树进行排序。例如,假设我的数据由
[4,6,2,8,4,5,7,3]
组成

  • 我将4设置为根元素
  • 把6放在右边
  • 把2放在4的左边
  • 把8放在6的右边
  • 然后我得到4,既然
    4=4
    ,我把它放在哪里?左边还是右边

    选项1

    选项2


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

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

    如果这是一个搜索树,那么一旦遇到额外的(冗余的)数据,我就会删除它;“它存在”。您确实说过这是一个搜索树,虽然不理想,但它实际上并没有被破坏-如果您搜索“4”,您将只捕获根节点(在本例中),并且永远不会在该节点下方下位以查看任何其他“4”。拥有所有额外的东西不是最佳的


    无论你选择哪种方式,都会有最好和最坏的情况;不要太担心左/右决策——一般来说,这并不重要。如果您对已知数据流中的详细信息掌握得很好,您将能够针对特定情况做出最佳决策。

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


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

    这只是一个设计决策,是的,它可以在您有大量副本的情况下提供最佳解决方案。在其他情况下(无重复),这会显著增加运行时间(在每个节点上进行额外检查)。它仍然归结为“最佳情况”与“最坏情况”是由您的输入数据集定义的。如果您有大量重复项,则需要O(n)操作才能找到所有元素。同意:随着唯一元素的数量接近1,#操作接近O(n)