二叉堆(Java)

本文详细介绍了二叉堆的实现原理,包括上浮和下沉操作的具体算法。通过上浮调整可以确保堆的性质不被破坏,而下沉操作则用于维护堆的结构,尤其是在执行删除操作时。文章还提供了创建二叉堆的方法,通过一系列的下沉调整,将普通数组转换为满足堆性质的数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉堆是一种特殊的堆,具有如下的特性:

原文链接

public class binaryheap {
	/*
	 * 上浮
	 * length:二叉堆的长度
	 */
	public int[] upAdjust(int arr[],int length) { 
		int child = length-1;
		int parent = (length-1)/2;
		int temp = arr[child];
		//进行上浮
		while(child>0&&temp<arr[parent]) {
			arr[child]=arr[parent];
			child = parent;
			parent = (child-1)/2;
		}
		arr[child]=temp;
		return arr;
	}
	/*
	 * 下沉:执行删除操作相当于把最后一个元素赋给根元素之后,认购对根元素执行下沉操作
	 * 
	 */
	
	public int[] downAdjust(int arr[],int parent,int length) {
		//临时保证要下沉的元素
		int temp = arr[parent];
		//定位左孩子
		int child = 2*parent+1;
		//开始下沉
		while(child<length) {
			if(child+1<length&&arr[child]>arr[child]+1) {
				child++;
			}
			//如果父节点比孩子结点小或者等于,则下沉结束
			if(temp<=arr[child]) {
				break;
			}
			arr[parent]=arr[child];
			parent = child;
			child = parent*2+1;
			
		}
		arr[parent]=temp;
		return arr;
		
	}
	/*
	 * 创建二叉堆
	 * 
	 */
	public int[] build(int arr[],int length) {
		for(int i=(length-2)/2;i>=0;i--) {
			arr=downAdjust(arr, i, length);
		}
		return arr;
		
	}
	

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值