堆的 shift down
堆(Heap)是一种特殊的完全二叉树,它通常用于实现优先队列。在堆中,每个节点的值都大于或等于(在最大堆中)或小于或等于(在最小堆中)其子节点的值。堆的操作包括插入元素(shift up)和删除元素(shift down 或 bubble down)。
本文将重点介绍堆的 shift down 操作,这是一种在删除堆的根元素后,为了维护堆的性质而进行的操作。
堆的基本概念
在详细讨论 shift down 操作之前,我们需要了解一些堆的基本概念:
- 完全二叉树:除了最后一层外,每一层都被完全填满,最后一层的节点都靠左排列。
- 最大堆:在最大堆中,对于每个节点 i,都有 $A[i] \geq A[2i]$ 和 $A[i] \geq A[2i+1]$。
- 最小堆:在最小堆中,对于每个节点 i,都有 $A[i] \leq A[2i]$ 和 $A[i] \leq A[2i+1]$。
Shift Down 操作
当我们从堆中删除最大元素(在最大堆中)或最小元素(在最小堆中)时,我们需要进行 shift down 操作来维护堆的性质。以下是 shift down 操作的步骤:
- 删除根节点:首先,我们将堆的根节点删除,这通常是将堆中的最后一个元素移动到根节点的位置。
- 比较与子节点