二叉堆的简单介绍

本文介绍了二叉堆的概念及其作为优先队列的应用。详细解释了二叉堆的堆序性质、基本操作如插入与删除节点的具体实现过程。
二叉堆简介:
优先队列是先进先出的模型
二叉堆是实现优先队列的一种常用的方式,以下简称堆
二叉堆是一颗完全填满的二叉树,完全二叉树的高为log(N)
我们可以用一个数组表示完全二叉树(二叉堆)
在这个数组中,对于任意i位置的元素,其左孩子在2i的位置上,其右孩子在2i+1位置上,其父节点在i/2位置上
 
二叉堆的堆序性质
极小堆
     让最小的元素在根节点,保证每个节点的数据都比父节点的要大。
极大堆
     让最大的元素在根节点,保证每个节点的数据都比父节点的要小。
 
基本操作:
插入节点:采用上滤的方式:
如图,我们将14插入到合适的位置
操作如下:先在最后可以插入的位置(也就是当前数组的有效位置的下一个位置)插入一个空的节点,将14插入这个空节点,
此时会破会极小堆的堆序,那么将此空节点的父节点插入空穴,再将14插入新的空穴,
如此向上移动,会找到合适的位置,这种方式叫做上滤。相比交换操作减少了赋值的次数。

 

删除节点:采用下滤的方式
如图,删除根节点之后,我们需要试图把最后的节点放入合适的位置,
其实,相对于在数组中而言,我们是在讲该树的某个子树全部进行向前移动,然后最后会空出一个节点给31,
那么,接下来,找到根节点的孩子中较小的哪一个,进行插入根节点。
再把新的空节点的子孩子中,较小的上移。
一直到最后,把31插入最后的空节点中。这种方式成为下滤。

 

 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/anzhi/p/7536397.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值