mysql建立堆_最小堆 构建、插入、删除的过程图解

1.简介

最小堆是一棵完全二叉树,非叶子结点的值不大于左孩子和右孩子的值。本文以图解的方式,说明

最小堆的构建、插入、删除的过程。搞懂最小堆的相应知识后,最大堆与此类似。

2.最小堆示例

2ca80ca8d0cf4e056f2618fe1827117e.png

3.最小堆的构建

初始数组为:9,3,7,6,5,1,10,2

按照完全二叉树,将数字依次填入。

填入后,找到最后一个结点(本示例为数字2的节点),从它的父节点(本示例为数字6的节点)

开始调整。根据性质,小的数字往上移动;至此,第1次调整完成。

注意,被调整的节点,还有子节点的情况,需要递归进行调整。

第二次调整,是数字6的节点数组下标小1的节点(比数字6的下标小1的节点是数字7的节点),

用刚才的规则进行调整。以此类推,直到调整到根节点。

以下是本示例的图解:

0513266c10dbeacb1dc5f85af1e2b093.png

72ed2d3b72281dfd54e23fb44f516c9d.png

c428721d09a57c4301e2ee6324bae7bd.png

6a2beb2774eac6c7620b3c7550ba9528.png

注意:数字9的节点 将和 数字1的节点 发生对调,对调后,需要递归进行调整,请一定注意。

b23f2dcf57b85497ef5c105d80a99256.png

50c09cc48097fb874b30c7f9fc9b96f5.png

4.最小堆的元素插入

以上个最小堆为例,插入数字0。

数字0的节点首先加入到该二叉树最后的一个节点,依据最小堆的定义,自底向上,递归调整。

以下是插入操作的图解:

2b2c259d1f867ca15bee33bdfb18db80.png

eb918c1fabafe0677f35d32ad0ba1573.png

47f8bde9804a1fddd63be5e90c836038.png

2c3f0c4bbfea1c2f088098d7e4b61015.png

5.最小堆的节点删除

对于最小堆和最大堆而言,删除是针对于根节点而言。

对于删除操作,将二叉树的最后一个节点替换到根节点,然后自顶向下,递归调整。

以下是图解:

c4157eb53a8fe837f47d22268024a51b.png

f0140b5aa6aa769792616d98d38874b3.png

33d2ac43376806352c4efb92615a3b6d.png

ea54126cf76cd06ea68921c081914c44.png

61324ac2ede45cbd7d04c3ed3d4d4b2b.png

注意:

如您发现本文档中有明显错误的地方,

或者您发现本文档中引用了他人的资料而未进行说明时,请联系我进行更正。

转载或使用本文档时,请作醒目说明。

必要时请联系作者,否则将追究相应的法律责任。

note:

If you find this document with any error ,

Or if you find any illegal citations , please contact me correct.

Reprint or use of this document,Please explain for striking.

Please contact the author if necessary, or they will pursue the corresponding legal responsibility.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值