最大/最小堆树可以包含重复值吗?

时间:2014-03-21 21:47:50

标签: java binary-tree heapsort min-heap max-heap

我想知道是否允许最大或最小堆树具有重复值?我一直试图通过在线资源找到有关这方面的信息是不成功的。

3 个答案:

答案 0 :(得分:18)

是的,他们可以。您可以在'算法简介'中阅读此内容。 (由Charles E. Leiserson,Clifford Stein,Thomas H. Cormen和Ronald Rivest撰写)。根据维基百科中二进制堆的定义:

  

所有节点都是[大于或等于](最大堆)或   根据,[小于或等于]( min sheaps )每个孩子   到为堆定义的比较谓词。

答案 1 :(得分:7)

是的,他们可以有重复项。来自wikipedia堆的定义:

  

父节点的键总是大于或等于   对于那些孩子而言,最高的关键是在根节点(这个   堆类型称为最大堆)或父节点的键是   小于或等于与子节点相同,最低键位于根节点(最小堆)

因此,如果他们有子节点相等的节点意味着它们可以重复。

答案 2 :(得分:1)

是的,但我会拒绝。为了提高效率,他们不应该有不同的重复值节点,或者它的目的有点失去(你必须搜索子节点等)。但是,您可以将每个节点设计为包含一个变量,该变量声明您的数据中该值的副本数量。

这是我的意见。如果这是一个糟糕的做法,我很乐意,如果有人能解释原因。我可能只需做一些效率测试。如果你正在存储像int这样的简单数据类型,那么我会发现它的效率较低,但是对于那些有id的大型对象节点来说它看起来很不错。