数据结构之「堆」

Posted 清尘闲聊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之「堆」相关的知识,希望对你有一定的参考价值。

堆 是一种特殊的完全二叉树结构,通常,它有两种类型:最小堆 和 最大堆。


最小堆(min heap)是父节点的值恒小于等于子节点的值。

最大堆(max heap)是父节点的值恒大于等于子节点的值。

二叉堆的性质


任意节点小于(或大于)它的所有子节点,最小值(或最大值)在堆的根上。

堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。


二叉堆的实现

堆的存储结构

堆一般可以用数组的方式来存储,数组的顺序其实就是堆层级遍历的结果。


堆的插入

由于堆是一个完全二叉树,每次总是先填满上一层,再在下一层从左往右依次插入。

插入步骤:
1.首先将新元素增加到堆的末尾。
2.然后在新元素与其父节点的值比较,如果新元素小于父节点的值则将两者交换位置。
3.不断进行第2步操作,直到不需要交换元素,或者达到堆顶。

最后就会得到一个最小堆,上面交换元素的过程叫做上滤。


堆的删除

堆的删除和插入操作是刚刚相反的,插入是从下往上调整堆,删除是从上往下调整堆。

删除步骤:
1.首先删除堆顶元素。
2.然后在比较左右子节点,将小的元素上调。
3.不断进行步骤2,直到不需要调整或者调整到堆底了。

上面交换元素的过程叫做下滤。


总结

堆有两种类型,最大堆和最小堆,并且堆总是一颗完全树。 


由于堆的 父节点的值恒小于等于子节点的值 或者 父节点的值恒大于等于子节点的值,可以作为 Top n 使用。


堆(通常是二叉堆)常用于排序,这种算法称作堆排序。

THE END


更多精彩内容在路上,欢迎「扫码」订阅

我走得很慢,但不会后退;一直在路上,用心写未来。



以上是关于数据结构之「堆」的主要内容,如果未能解决你的问题,请参考以下文章

数据结构之堆栈

数据结构之堆

数据结构之堆的模拟实现

挖掘算法中的数据结构:堆排序之 二叉堆(Heapify原地堆排序优化)

重温基础算法内部排序之堆排序法

重温基础算法内部排序之堆排序法