MaxHeap & MinHeap 简单易懂的介绍

看面经的时候看到了特么要手动实现最大堆和最小堆。我就赶紧上网搜了搜,发现这篇特别好。这里转载一下:http://www.cnblogs.com/skywang12345/p/3610187.html

以最大堆为例,最大堆的特点为

[性质一] 堆中任意节点的值总是不小于其子节点的值;
[性质二] 堆总是一棵完全树。
下面是例子,因为是完全树,所以堆完全可以由数组来表示

(01) 索引为i的左孩子的索引是 (2*i+1);
(02) 索引为i的左孩子的索引是 (2*i+2);
(03) 索引为i的父结点的索引是 floor((i-1)/2);



下面用图片简单描述一下最大堆的插入和删除。

插入:


就是先把插入节点放在最后,然后一步步和父节点比较,如果顺序不对就swap。


删除:


先把root删了,删完之后把最后一个挪上来,然后再一步步比较的swap。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值