您的位置:首页 > 其它

关于堆的一点总结

2017-07-01 23:22 190 查看
一、什么是堆

堆是一颗被完全填满的二叉树,可能的例外是在底层,底层上的元素从左到右填入,这样的树被称为完全二叉树。

二、堆的特性

1、如果一个堆有N个节点,那么堆的高度为 h = [lgN]
。即N 在
2h 到 2h+1-1  之间。

2、父节点的值大于(大顶堆)或小于(小顶堆)子节点的值。

三、堆支持的操作

1、上浮 shiftup

2、下沉 shiftdown

3、插入 push

4、弹出 pop

5、取顶 top

其中,当前元素若可能与下一层元素交换,就是siftdown;若可能与上一层元素交换,就是siftup。或者说当前元素被“挖出”后形成的“坑”,若往上升就是siftup,若往下降就是siftdown。当你插入了某个节点或弹出了节点时,为了恢复堆的性质,就可能要执行这两种操作。

四、堆的表示

堆可以用数组来表示。若从下标0开始存放元素的话,那么对于数组任一位置 i上的元素,其左儿子在位置2i+1上,右儿子在2i+2上,它的父亲则在[(i-1)/2]上。

对于一个数组a,可以通过这种方式把它转换为堆:就是对下标为[a.length/2]-1一直到0为止 的位置(实际上也就是成为父节点的位置)执行上面所说的“下沉” 操作。

参考:

1、http://www.cnblogs.com/JVxie/p/4859889.html

2、http://blog.csdn.net/ditian1027/article/details/19987239

3、http://blog.csdn.net/zhutulang/article/details/7746033
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: