维基百科(http://en.wikipedia.org/wiki/Heap_(data_structure))中给出的堆的定义是
在计算机科学中,堆是一种专门的基于树的数据结构 满足堆属性:如果A是B的父节点,那么 密钥(A)按密钥(B)排序,顺序相同 在整个堆中应用。父节点的键始终是 大于或等于孩子的那些,最高的关键是 在根节点(这种堆称为最大堆)或密钥 父节点小于或等于子节点(min 堆)
该定义没有说明树是完整的。例如,根据该定义,二叉树5 => 4 => 3 => 2 => 1根元素为5且所有后代都是右子元素也满足堆属性。我想知道堆数据结构的精确定义。
答案 0 :(得分:2)
正如其他人在评论中所说的那样:是堆的定义,而你的示例树是一个堆,尽管是一个退化/不平衡的堆。树完整,或至少合理平衡,对于树上的更有效操作是有用的。但是低效的堆仍然是堆,就像不平衡的二叉搜索树仍然是二叉搜索树一样。
请注意,“heap”不是指数据结构,它指的是满足堆属性的任何数据结构或(取决于上下文)一组操作。在作为堆的数据结构中,最有效的数据结构明确地或隐含地保证树完整或稍微平衡。例如,二进制堆根据定义是一个完整的二叉树。
无论如何,你为什么关心?如果您关心特定操作的特定下限或上限,请说明那些而不是需要堆。如果你讨论堆积和完成树的特定数据结构,请说明那个而不是仅仅谈论堆(当然,假设完整性很重要)。