数据结构 堆

本文介绍了堆作为优先级队列的用途,详细阐述了如何使用Java构建大根堆和小根堆,包括插入和删除操作,并提供了堆排序的示例。通过链表描述大根堆,确保每个节点的值大于其子节点。大根堆的插入和删除操作分别涉及保持堆性质和调整树结构。此外,还展示了堆在优先级队列和排序中的应用。
摘要由CSDN通过智能技术生成

堆是常使用的优先级队列,可以分为大根堆和小根堆,其中每一次从大根堆(小根堆)取出的元素都是最大(最小)的,下面是java构建大根堆的示例。


大根堆(小根堆)是一棵完全二叉树,其中每个节点的值都大于(小于)或等于子节点的值。关于树、二叉树、完全二叉树以及二叉树的操作(前序遍历)在另一篇文章中说明。下面是大根堆和小根堆的两个示例。


大根堆的描述可以使用数组描述或链表描述,使用数组描述时当树的高度增加,浪费的空间会很大,因此这里使用链表描述大根堆。使用链表描述大根堆需要二叉树节点,下面定义二叉树结点,每个节点至少含有左子树指针和右子树指针和构建堆使用的优先级域,另外可以根据需要添加域值。

package Structure;

//定义树节点
class treeNode{
	
	protected int element;//节点域
	protected treeNode leftChild,//左子树指针和右子树指针
	         rightChild;
	
	//无参构造函数,构建空树
	public treeNode(){
		leftChild=rightChild=null;
	}
	
	//新建节点,插入末尾
	public treeNode(int theElement){
		element=theElement;
		leftChild=rightChild=null;
	}
	
	//赋值构造函数,替换节点
	public treeNode(int theElement,treeNode theleftchild,
	         treeNode therightchild){
	    element=theElement;
	    leftChild=theleftchild;
	    rightChild=therightchild;}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值