二叉堆、大根堆、小根堆

本文详细介绍了二叉堆的概念,包括大根堆和小根堆的定义,以及它们在找出最大/最小值上的应用。通过数组存储完全二叉树结构,并阐述了二叉堆的基本操作,如上浮、下沉和构建堆的过程。同时提供了相关资源供进一步学习。
摘要由CSDN通过智能技术生成

二叉堆算法详解

基础知识

二叉堆的应用:找出最大/最小值
二叉堆定义:堆是完全二叉树。父结点的键值总是大于等于(小于等于)任何一个子节点的键值。
大根堆:又称最大堆、大顶堆。指根节点值最大的二叉堆
小根堆:又称最小堆、小顶堆。指根节点值最小的二叉堆

二叉堆举例

此图为大根堆
ALT

存储方式

存储方式:数组。需注意:堆存储从下标0开始还是1开始,以下例子,从下标0开始存储。
假设父节点下标为i,左孩子节点为2i+1,右孩子结点为2i+2。上图二叉堆的存储形式为:在这里插入图片描述

二叉堆基本操作

上浮和下沉都以大根堆为例。如果不懂建议看第三条参考资料。

上浮

可用插入结点
思路(大根堆):

  1. 将插入的结点放到二叉堆的最后,即数组的最后一位
  2. 将插入结点的值A和父结点的值B比较。
  3. 如果A>B,A的值等于B的值。
  4. 重复步骤2、3,直至A<=B或插入结点无父节点。

代码

public void add(int[] array){
   
        int childIndex=array.length-1;
        int parentIndex=(childIndex-1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值