首页 > 其他 > 详细

关于堆

时间:2019-11-07 21:26:30      阅读:85      评论:0      收藏:0      [点我收藏+]

关于堆

堆本质上是用数组实现的二叉树。

大根堆:一棵完全二叉树,满足任一节点都比其子节点大;用于升序排列

小根堆:一棵完全二叉树,满足任一节点都比其他子节点小;用于降序排列

技术分享图片

如何用数组实现堆?

节点在数组中的位置index 和它的父节点以及子节点的索引之间有一个映射关系。

parent(i) = floor((i - 1)/2)             //floor函数表示向下取整
left(i)   = 2i + 1
right(i)  = 2i + 2
[ 10, 7, 2, 5, 1 ]
Node Array index (i) Parent index Left child Right child
10 0 -1 1 2
7 1 0 3 4
2 2 0 5 6
5 3 1 7 8
1 4 1 9 10

使用数组索引代替指针,节约了空间,但是需要进行更多的计算。(这就是交易)

关于堆

原文:https://www.cnblogs.com/noneplus/p/11815634.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!