算法通关村第十四关-青铜挑战认识堆

大家好我是苏麟 , 今天带大家认识认识堆 .

堆是将一组数据按照完全二叉树的存储顺序,将数据存储在一个一维数组中的结构。

堆有两种结构,一种称为大顶堆,一种称为小顶堆 :

大顶堆

大顶堆的任何一个父节点的值,都大于或等于它左、右孩子 节点的值。

小顶堆

最小堆的任何一个父节点的值,都小于或等于它左、右孩子 节点的值。


堆的根节点叫作堆顶

大顶堆小顶堆 的特点决定了:大顶堆 的堆顶是整个堆中的最大元素;小顶堆的堆顶是整个堆中的最小元素。

堆的自我调整

所谓堆的自我调整,就是把一个不符合堆性质的完全二叉树,调整成一个堆 .

下面让我们以最小堆为例,看一看二叉堆是如何 进行自我调整的

插入节点

当堆插入节点时,插入位置是完全二叉树的最后一个位置。例如插入一个 新节点,值是 0

这时,新节点的父节点 5 比 0 大,显然不符合最小堆的性质。于是让新节点"上 浮",和父节点交换位置

继续用节点 0 和父节点 3 做比较,因为 0 小于 3,则让新节点继续"上浮"

继续比较,最终新节点 0 "上浮"到了堆顶位置

这就是插入的过程 .

删除节点

堆删除节点的过程和插入节点的过程正好相反,所删除的是处于堆顶的节点。例如删除最小堆的堆顶节点 1

这时,为了继续维持完全二叉树的结构,我们把堆的最后一个节点 10 临时补到 原本堆顶的位置

接下来,让暂处堆顶位置的节点10和它的左、右孩子进行比较,如果左、右孩子节点中最小的一个(显然是节点2)比节点10小,那么让节点10"下沉"

继续让节点10和它的左、右孩子做比较,左、右孩子中最小的是节点7,由于10 大于7,让节点10继续"下沉"

这样一来,二叉堆重新得到了调整

大家好好理解一下 .

这期就到这里 , 下期见!

相关推荐
Navigator_Z4 分钟前
LeetCode //C - 1203. Sort Items by Groups Respecting Dependencies
c语言·算法·leetcode
冷雨夜中漫步5 分钟前
DeepSeek Harness:一切皆插件的 AI Agent 框架深度解析
java·人工智能·ai·开源·github
lhldsg27 分钟前
社区健身系统开发实战:从需求分析到落地部署全流程指南
java·开发语言·小程序·需求分析
覆东流36 分钟前
4.Java运算符与表达式
java·开发语言·后端
JacksonMx1 小时前
ContentCachingRequestWrapper 实战:解决请求体“只能读一次”的官方方案
java·spring boot·spring
我变成萤火虫1 小时前
2026 ICPC沈阳邀请赛Vp补题
数据结构·c++·算法·贪心算法·stl·排序算法·动态规划
神威难绷泪1 小时前
数据结构:二叉树
数据结构·二叉树
风起洛阳@不良使1 小时前
中级软考(软件攻城狮)第3章知识点——数据结构与数据运算(线性结构+非线性结构)
数据结构·算法·链表
微石科技1 小时前
医疗设备维保如何从被动维修转向预防管理?宁波微石科技让运行数据提前发信号
java·后端·struts
AndrewHZ1 小时前
图像处理入门009 | OpenCV 图像读取与显示:imread/imshow 全解析
图像处理·python·opencv·算法·计算机视觉·图像显示