数据结构-堆

什么是堆:堆是一棵完全二叉树

分类:

  1. 其根结点的值小于两个子结点的值,其余任何一个结点的值都小于其子结点的值——小根堆。
  2. 其根结点的值大于两个子结点的值,其余任何一个结点的值都大于其子结点的值——大根堆。

什么是完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。

例子:一个完全二叉树
数据结构-堆

大根堆:
数据结构-堆

小根堆:
数据结构-堆


堆的存储结构:

一般都用数组来表示堆,i结点的父结点下标就为(i–1)/2。它的左右子结点下标分别为2 * i + 1和2 * i + 2。如第0个结点左右子结点下标分别为1和2。

例如上面的小根堆在数组的存储结构为:

array 5 24 33 25 46 42 57 28 48 60 48 99
index 0 1 2 3 4 5 6 7 8 9 10 11