数据结构之二叉堆

堆的两个特性:

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

2、有序性:任一节点的值是其子树所有节点的最大值或最小值(最大堆或者最小堆)

最大堆 的插入 :

将元素插入到数组的最后一个(lastIndex),通过 lastIndex /2 取得上一层节点的值,进行比较,如果父节点大,则插入到lastindex,如果父节点小,则将父节点换到lastindex,将插入的元素换到父节点位置,如此循环。 

最大堆 的删除 

返回的是最大值,是取跟节点的值删除并返回,然后取最大堆中最后一个元素从根节点开始,由根节点位置开始向下过滤排序,父节点对比子节点(取子节点中最大的一个节点)如果大于子节点则证明元素找到了他应该放的位置,如果小于子节点则将子节点移至父节点,继续往下循环找,直至大于子节点或者到最后节点。

最大堆的建立 :

两种 一种为循环插入, 复杂度为Nlog2N 较复杂, 另一种为一次性建立成完全二叉树,然后从最后一个有子节点的节点开始,与子节点进行对比,大则不动,小则将子节点给调上来

参考http://www.icourse163.org/course/ZJU-93001

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值