数据结构之「堆」

堆 是一种特殊的彻底二叉树结构,一般,它有两种类型:最小堆 和 最大堆。算法

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

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

二叉堆的性质

任意节点小于(或大于)它的全部子节点,最小值(或最大值)在堆的根上。
堆老是一棵彻底树。即除了最底层,其余层的节点都被元素填满,且最底层尽量地从左到右填入。cdn

二叉堆的实现

堆的存储结构blog

堆通常能够用数组的方式来存储,数组的顺序其实就是堆层级遍历的结果。排序

堆的插入it

因为堆是一个彻底二叉树,每次老是先填满上一层,再在下一层从左往右依次插入。io

插入步骤:
1.首先将新元素增长到堆的末尾。
2.而后在新元素与其父节点的值比较,若是新元素小于父节点的值则将二者交换位置。
3.不断进行第2步操做,直到不须要交换元素,或者达到堆顶。class

最后就会获得一个最小堆,上面交换元素的过程叫作上滤。二叉树

堆的删除

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

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

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

总结

堆有两种类型,最大堆和最小堆,而且堆老是一颗彻底树。

因为堆的 父节点的值恒小于等于子节点的值 或者 父节点的值恒大于等于子节点的值,能够做为 Top n 使用。

堆(一般是二叉堆)经常使用于排序。这种算法称做堆排序。

PS:
清山绿水始于尘,博学多识贵于勤。
我有酒,你有故事吗?
微信公众号:「清尘闲聊」。
欢迎一块儿谈天说地,聊代码。

相关文章
相关标签/搜索