数据结构 最大堆和最小堆

前言:
关于最大堆和最小堆的题目,我做过了很多次,但是好像没有一个是完全独立AC的。2021春季PAT考试的前一天,天梯赛校内赛还专门考了最小堆,我复习了一下,结果第二天PAT考了最大堆,又是没做出来…天梯赛快到了,打算写篇博客整理一下最大堆和最小堆问题的解法。

正文:
最大堆和最小堆(又称大顶堆和小顶堆)问题一般是建立一个普通的数组,根据二叉树的性质对其进行交换移动。
建堆的方式有全放进去再排,也有边插入边排序的。由于最大堆和最小堆是不唯一的,因此这两种方式得出来的结果是不唯一的,一定要仔细地阅读题意,分清楚题目要求的是哪种方式~

对于最大堆来说,如果是插入式的,做法是一个个地插入,每次插入的时候,最大堆向上调整,即当前元素比父节点大的时候,就交换顺序。如果是一次次全部放好再生成堆的,需要从最后一个元素开始,依次向下调整,即当前元素选择与最大的父节点进行交换。

对于最小堆来说,如果是插入式的,做法是一个个地插入到最后面,每次插入的时候,向上调整,与最大堆同理。如果是后者建堆,则从最后一个结点开始,依次向下调整。

注:不难发现,对叶节点进行向下调整不会发生任何操作,因此,我们可以从非叶节点开始,也就是最大节点的下标除以2。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值