【数据结构】堆和二叉堆

1.什么是堆

堆是一棵具有特定性质的二叉树,堆的基本要求是堆中所有结点的值必须大于等于(或小于等于)其孩子结点的值,这也称为堆的性质。堆还有另一个性质,就是当h>0时,所有叶子结点都处于第h或h-1层,也就是说,堆应该是一棵完全二叉树。

2.堆的类型

最大堆:结点的值必须大于等于其孩子结点的值
最小堆:结点的值必须小于等于其孩子结点的值

3.二叉最大堆的实现

堆化元素

堆化是堆最重要的操作,当插入或删除堆的一个元素时,有可能使堆不满足堆的性质,在这种情况下,需要调整堆中元素的位置使之重新变为堆,这个过程叫做堆化。在最大堆中,要堆化一个元素,需要找到它的孩子结点中的最大值,然后将它与当前元素交换,重复该过程直至每个结点都满足堆的性质为止。

Java版本实现

package com.wuyi.notecode.sort;

public class Heap {
   
    public int[] nums;
    public int count;//堆中元素个数
    public int size;//堆的大小

    public Heap(int size ) {
   
        this.size = size;
        count = 0;
        nums = new int[size];
    }

    //获取父节点
    public int Parent(int i) {
   
        if(i <= 0 || i > this.count)
            return -1;
        return( i - 1 ) / 2;
    }

    //获取左孩子
    public int LeftChild(int i) {
   
        int l = 2 * i +1;
        if(l <= 0 || l > this.count - 1)
            return -1;
        return l;
    }

    //获取右孩子
    public int RightChild(
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值