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

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

1.堆的特征

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

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

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

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

算法通关村第十四关——堆结构青铜挑战笔记_第1张图片

 2.堆的构造过程

那么如何构造一个堆呢?

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

调整以4为根的子树:

算法通关村第十四关——堆结构青铜挑战笔记_第2张图片

 调整以3为根的子树:

算法通关村第十四关——堆结构青铜挑战笔记_第3张图片 调整以2为根的子树:

算法通关村第十四关——堆结构青铜挑战笔记_第4张图片

 调整以1为根的子树:

算法通关村第十四关——堆结构青铜挑战笔记_第5张图片

调整以0为根的子树:

最终构造的大根堆如图:

算法通关村第十四关——堆结构青铜挑战笔记_第6张图片

3.堆插入操作

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

算法通关村第十四关——堆结构青铜挑战笔记_第7张图片

4.堆删除操作 

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

算法通关村第十四关——堆结构青铜挑战笔记_第8张图片

 

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

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

你可能感兴趣的:(算法,笔记,数据结构)