数据结构 – Heap数据结构的精确定义是什么?

维基百科(
http://en.wikipedia.org/wiki/Heap_(data_structure))中给出的堆的定义是

In computer science, a heap is a specialized tree-based data structure
that satisfies the heap property: If A is a parent node of B then
key(A) is ordered with respect to key(B) with the same ordering
applying across the heap. Either the keys of parent nodes are always
greater than or equal to those of the children and the highest key is
in the root node (this kind of heap is called max heap) or the keys of
parent nodes are less than or equal to those of the children (min
heap)

该定义没有说明树是完整的.例如,根据该定义,二叉树5 => 4 => 3 => 2 => 1根元素为5且所有后代都是右子元素也满足堆属性.我想知道堆数据结构的精确定义.

最佳答案 正如其他人在评论中所说:这是堆的定义,你的示例树是一个堆,尽管是一个退化/不平衡的.树完整,或至少合理平衡,对于树上的更有效操作是有用的.但是低效的堆仍然是堆,就像不平衡的二叉搜索树仍然是二叉搜索树一样.

请注意,“heap”不是指数据结构,它指的是满足堆属性的任何数据结构或(取决于上下文)一组操作.在作为堆的数据结构中,最有效的数据结构明确地或隐含地保证树完整或稍微平衡.例如,二进制堆根据定义是完整的二叉树.

无论如何,你为什么关心?如果您关心特定操作的特定下限或上限,请说明那些而不是需要堆.如果您讨论堆积和完成树的特定数据结构,请说明而不是仅仅谈论堆(当然,假设完整性很重要).

点赞