数据结构 — 堆
目录 文章目录 目录 堆 堆的应用 堆的基本操作 往堆中插入元素 删除堆顶元素 堆的排序 参考文章 堆 堆可以是一个完全二叉树,这样实现的堆也被称为二叉堆。完全二叉树,它的叶子节点都在最后一层,并且这些叶子节点都是靠左排序的。 堆中节点的值都 >=(或 <=)其子节点的值,堆中如果节点的值都 >= 其子节点的值,我们把它称为大顶堆,如果都 <= 其子节点的值,我们将其称为小顶堆。 从堆的特点可知,下图中 1、2 是大顶堆,3 是小顶堆, 4 不是堆(不是完全二叉树)。 从上图也可以看到,一组数据如果表示成大顶堆或小顶堆,可以有不同的表示方式,因为它只要求节点值 >=(或 <=)子节点值,并未规定左右子节点的排列方式。 堆的底层是如何表示的呢,从以上堆的介绍中我们知道堆是一颗完全二叉树,而完全二叉树可以用数组表示: 如上图示,给完全二叉树按从上到下、从左到右编号,则对于任意一个节点来说,很容易得知如果它在数组中的位置为 i,则它的左右子节点在数组中的位置为 2i、2i + 1,通过这种方式可以定位到树中的每一个节点,从而串起整颗树。 一般对于二叉树来说每个节点是要存储左右子节点的指针,而由于完全二叉树的特点(叶子节点都在最后一层,并且这些叶子节点都是靠左排序的),用数组来表示它再合适不过,用数组来存储的好处在于不需要存指向左右节点的指针,在这颗树很大的情况下能省下很多空间。 堆的应用