堆
堆就像是山川的峰峦,它们层叠起伏、形态各异。
每一座山峰都有其高低之分,而最高的山峰总是最先映入眼帘。
8.1 堆
「堆 heap」是一种满足特定条件的完全二叉树,主要可分为图 8‑1 所示的两种类型。
‧「大顶堆 max heap」:任意节点的值 ≥ 其子节点的值。
‧「小顶堆 min heap」:任意节点的值 ≤ 其子节点的值。
堆作为完全二叉树的一个特例,具有以下特性。
- ‧ 最底层节点靠左填充,其他层的节点都被填满。
- ‧ 我们将二叉树的根节点称为“堆顶”,将底层最靠右的节点称为“堆底”。
- ‧ 对于大顶堆(小顶堆),堆顶元素(即根节点)的值分别是最大(最小)的。
8.1.1 堆常用操作
需要指出的是,许多编程语言提供的是「优先队列 priority queue」,这是一种抽象数据结构,定义为具有优
先级排序的队列。
实际上,堆通常用作实现优先队列,大顶堆相当于元素按从大到小顺序出队的优先队列。从使用角度来看,
我们可以将“优先队列”和“堆”看作等价的数据结构。因此,本书对两者不做特别区分,统一使用“堆“来
命名。
堆的常用操作见表 8‑1 ,方法名需要根据编程语言来确定。