我正在教自己的数据结构,我目前正在研究二叉搜索树。我很好奇如果您有相同的数据,您将如何排序树。例如,假设我的数据包含[4,6,2,8,4,5,7,3]
。
然后我到4,自4=4
以来我把它放在哪里?在左边还是右边?
选项#1
选项#2
其中一个是正确还是两个都错了?如果它们都错了,你能告诉我它们应该如何分类。谢谢!
答案 0 :(得分:2)
通常二叉树不允许数据重复。如果您进行自定义实现,则可以存储元素数。 Java中的TreeSet就是一个例子 - 它只包含唯一的元素。
实际上你列出的案例打破了树的整个结构。搜索操作现在看起来很奇怪,无法使用 O(ln n)执行。在最坏的情况下,它将采用 O(n),因此您将失去此数据结构的所有好处。
答案 1 :(得分:0)
如果这是一个排序树,那么无论哪种方式,你所拥有的都可以正常工作;最后,你将进行树木行走并转储数据。
如果这是一个搜索树,那么我只会在遇到它时丢弃额外的(冗余)数据; “它存在”。你确实说过这是一个搜索树,虽然并不理想,但它实际上并没有被破坏 - 如果你搜索“4”,你只需要捕获根节点(在这种情况下),并且永远不要在它下面看到任何其他“4”。这不是最佳的,有额外的#s。
无论您选择哪种方式,都会出现最佳情况和最坏情况;不要过分担心左/右决策 - 通常无所谓。如果您已经掌握了已知数据流中的详细信息,那么您将能够针对该特定案例做出最佳决策。