二叉堆的简单介绍

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

 

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

 

 
 
 
 
 
 
 
 
 
posted @ 2017-09-17 17:33  赵安之  阅读(390)  评论(0编辑  收藏  举报