概念:

二叉堆其实就是一种特殊的二叉树(完全二叉树),只不过存储在数组里。一般的链表二叉树,我们操作节点的指针,而在数组里,我们把数组索引作为指针。
其主要操作就两个,sink(下沉)和 swim(上浮),用以维护二叉堆的性质。
其主要应用有两个,

  • 首先是一种排序方法「堆排序」
  • 第二是一种很有用的数据结构「优先级队列」

图片.png

二叉堆还分为最大堆和最小堆。

  • 最大堆的性质是:每个节点都大于等于它的两个子节点。
  • 类似的,最小堆的性质是:每个节点都小于等于它的子节点

优先级队列:

优先级队列这种数据结构有一个很有用的功能,你插入或者删除元素的时候,元素会自动排序,这底层的原理就是二叉堆的操作
数据结构的功能无非增删查该,优先级队列有两个主要 API,分别是 insert 插入一个元素和 delMax 删除最大元素(如果底层用最小堆,那么就是 delMin

核心方法:

图片.png
图片.png

insert 方法先把要插入的元素添加到堆底的最后,然后让其上浮到正确位置。
图片.png

delMax 方法先把堆顶元素 A 和堆底最后的元素 B 对调,然后删除 A,最后让 B 下沉到正确位置
图片.png**