我想知道是否允许最大或最小堆树具有重复值?我一直试图通过在线资源找到有关这方面的信息是不成功的。
答案 0 :(得分:18)
是的,他们可以。您可以在'算法简介'中阅读此内容。 (由Charles E. Leiserson,Clifford Stein,Thomas H. Cormen和Ronald Rivest撰写)。根据维基百科中二进制堆的定义:
所有节点都是[大于或等于](最大堆)或 根据,[小于或等于]( min sheaps )每个孩子 到为堆定义的比较谓词。
答案 1 :(得分:7)
是的,他们可以有重复项。来自wikipedia堆的定义:
父节点的键总是大于或等于 对于那些孩子而言,最高的关键是在根节点(这个 堆类型称为最大堆)或父节点的键是 小于或等于与子节点相同,最低键位于根节点(最小堆)
因此,如果他们有子节点相等的节点意味着它们可以重复。
答案 2 :(得分:1)
是的,但我会拒绝。为了提高效率,他们不应该有不同的重复值节点,或者它的目的有点失去(你必须搜索子节点等)。但是,您可以将每个节点设计为包含一个变量,该变量声明您的数据中该值的副本数量。
这是我的意见。如果这是一个糟糕的做法,我很乐意,如果有人能解释原因。我可能只需做一些效率测试。如果你正在存储像int这样的简单数据类型,那么我会发现它的效率较低,但是对于那些有id的大型对象节点来说它看起来很不错。