提示:专栏解锁后,可以查看该专栏所有文章。
什么是堆
堆是一种完全二叉树,有最大堆和最小堆两种。
- 最大堆:对于每个非叶子节点V, V的值都比它的两个孩子大,称为最大堆特性(heap orderproperty)最大堆里的根总是存储最大值,最小的值存储在叶节点。
- 最小堆:和最大堆相反,每个非叶子节点V, V的两个孩子的值都比它大。
![](https://i-blog.csdnimg.cn/blog_migrate/8944d70d9a729825c73791f60d49e372.png#pic_center)
堆的表示
之前我们用一个节点类和二叉树类表示树,这里其实用数组就能实现堆。
![](https://i-blog.csdnimg.cn/blog_migrate/73a9e8d2d55437cf51719364efe3c1c2.png#pic_center)
仔细观察下,因为完全二叉树的特性,树不会有间隙。对于数组里的一个下标i,我们可以得到它的父亲和孩子的节点对应的下标:
parent=int((i