通俗解释大顶堆和小顶堆

  1. 基础数据结构
    想象我们有一个数组,数组中有0到9,10个元素。
    在这里插入图片描述
    我们按照顺序将一颗二叉树画出来。
    在这里插入图片描述
  2. 如果我们将数据填入数组之中,树种相应节点的值也将填入。

这里我们观察到,树中节点之间存在如下关系:

假设当前节点的下标为i ——

节点的左子节点的下标为:2 * i + 1;
节点的右子节点的下标为:2 * i + 2;

  1. 大顶堆和小顶堆
    我们知道大顶推满足的条件是每一个父节点都比子节点大。
    那么我们应该如何通过调换节点的位置来构建这样的数据结构呢?
    在这里插入图片描述

我们取这个树的一个片段,假设数据为2,1,3。那么我们需要进行的一个操作是heapify-down,通过将2和1与3中比较大的节点替换位置,以此来满足条件。

这是我们调整的过程。

我们观察可知,对于一颗长度为10的树(堆),我们自上而下只需要将节点4,3,2,1,0分别进行heapify既可以满足大顶堆的满足条件。

建堆代码:

    //build max heap
    public void buildHeap(int
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值