数据结构之「堆」

作者: 清尘闲聊 | 来源:发表于2019-04-18 11:54 被阅读1次

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

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

image

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

image

二叉堆的性质

任意节点小于(或大于)它的所有子节点,最小值(或最大值)在堆的根上。
堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。

二叉堆的实现

堆的存储结构

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

堆的插入

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

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

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

堆的删除

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

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

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

总结

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

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

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

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

相关文章

  • 数据结构之「堆」

    堆 堆 是一种特殊的完全二叉树结构,通常,它有两种类型:最小堆 和 最大堆。 最小堆(min heap)是父节点的...

  • 数据结构之堆

    堆:n个元素的序列{k1,k2,…,kn},当且仅当满足下列关系时,成为堆: Heaps(priority que...

  • 数据结构与算法之美-28讲堆和堆排序

    数据结构与算法之美-28讲堆和堆排序 特别备注 本系列非原创,文章原文摘自极客时间-数据结构算法之美[https:...

  • iOS 数据结构之堆

    堆 一个堆是一个二叉树,是以数组的方式存在,因此他不用父子指针。这个树由于堆的特性是部分有序的,这个特性决定着这些...

  • (八)数据结构之堆

    堆的概念: 堆(英语:Heap)是计算机科学中的一种特别的树状数据结构。若是满足以下特性,即可称为堆:“给定堆中任...

  • 堆结构的实现

    堆的定义: 这里的堆是指一种数据结构(或数据结构属性),非指堆内存。堆属性用二叉树来体现,具有堆属性的数据结构才可...

  • 看图说话数据结构之二项队列(优先队列)——原理解析

    数据结构之二叉堆(优先队列)——原理解析,数据结构之二叉堆(优先队列)——java实现,数据结构之左式堆(优先队列...

  • 栈和堆以及栈区和堆区的区别

    栈和堆以及栈区和堆区的区别 数据结构中的栈和堆 栈:具有先进后出性质的数据结构 堆:一种经过排序的树形数据结构,节...

  • 数据结构中堆、栈和队列的理解

    一、堆 堆是一种经过排序的树形数据结构,每个节点都有一个值,通常我们所说的堆的数据结构是指二叉树。所以堆在数据结构...

  • iOS堆、栈和队列

    堆 堆是一种经过排序的树形数据结构,每个节点都有一个值,通常我们所说的堆的数据结构是指二叉树。所以堆在数据结构中通...

网友评论

    本文标题:数据结构之「堆」

    本文链接:https://www.haomeiwen.com/subject/ydpwwqtx.html