码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树——堆

时间:2019-08-14 21:41:50      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:img   维数   如何   地方   com   图片   复杂度   mic   alt   

一、堆的性质

  结构性:用数组表示的完全二叉树

  有序性:任意一结点的关键字是其子树所有结点的最大值(或最小值)

二、最大堆的操作

1、创建一个空的最大堆,堆从下标为1的地方开始存放(根结点下标为1)

技术图片

2、最大堆的插入

首先,把要插入的结点放在数组的末尾,假设下标为H->size + 1

再将它与父结点比较,如果它比父结点大,两者互换位置

直到它比父结点小,这时候下标为0的很大的元素起到了哨兵作用。

技术图片

3、最大堆的删除:删除最大的元素,然后再调整剩余结点,使其仍然是一个最大堆

把最大堆的最后一个元素a挪到根结点

找出a现在的左右儿子中较大的那个

如果a比左右儿子中较大的那个要小

互换位置

继续比较a与左右儿子中较大的那个

直到a比左右儿子都要大

技术图片

4、最大堆的建立:将N个元素按最大堆的要求存储在一维数组中

方法1:一个一个插入,效率较低

方法2:在线性时间复杂度下建立最大堆

    (1)将N个元素按输入顺序存入,先满足完全二叉树的结构特性

    (2)调整各结点位置,以满足最大堆的有序性

 技术图片              技术图片

一个结点,左子树是一个最大堆,右子树是一个最大堆

从删除操作,我们已经知道如何将他们三者调成一个最大堆

那么现在我们可以倒过来,逐步建立最大堆

下图中,p表示结点——左子树——右子树模型中结点的下标

H表示完全二叉树,一开始不是最大堆,但执行完PerDown后是最大堆

技术图片

 

二叉树——堆

标签:img   维数   如何   地方   com   图片   复杂度   mic   alt   

原文地址:https://www.cnblogs.com/maider/p/11354651.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!