算法通关村第十四关——堆结构青铜挑战笔记

该部分内容主要针对堆结构进行归纳总结,核心内容在于能讲述清楚堆的特征、构造过程以及插入/删除操作,最好是结合图示进行学习,事半功倍!

1.堆的特征

什么是堆?堆就是将数据按照完全二叉树顺序进行存储,实际数据存储在数组中的结构。

大根堆:任意节点值大于左右孩子===>根节点最大

小根堆:任意节点值小于左右孩子===>根节点最小

数组下标与节点父子关系:当前节点下标为i,那么它的父节点的下标就是(i-1)/2,如下图所示

 2.堆的构造过程

那么如何构造一个堆呢?

构造大根堆为例:首先需要有一个原始序列,比如[0,1,2,3,4,5,6,7,8,9],从序列尾部的父节点开始不断调整子树使其满足大根堆,最终使得整个树满足大根堆的要求。【需要调整的节点已经加粗表示】

调整以4为根的子树:

 调整以3为根的子树:

 调整以2为根的子树:

 调整以1为根的子树:

调整以0为根的子树:

最终构造的大根堆如图:

3.堆插入操作

只需要插入完全二叉树中第一个空节点(null)处,然后不断调整即可!其调整类似于“冒泡过程”,将大(小)元素不断向上冒泡即可!

4.堆删除操作 

堆删除操作非常有意思,用一个故事概括就是:皇上突然驾崩了,这时候先找个大臣维持局面,大臣先看左右两个皇子谁更强谁就是老大,然后大臣步步隐退,直到找到属于自己的位置(来自鱼骨头)

 

OK,《算法通关村第十四关——堆结构青铜挑战笔记》结束,喜欢的朋友三联加关注!关注鱼市带给你不一样的算法小感悟!(幻听)

再次,感谢鱼骨头教官的学习路线!鱼皮的宣传!小y的陪伴!ok,拜拜,第十四关第二幕见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值