Python自定义二叉堆类

二叉堆有两种:最小成员key排在队首的称为“最小堆(min heap)”;最大key排在队首的是“最大堆(max heap)”,这是一种优先队列的实现方式。

优先队列的出队(Dequeue)操作和队列一样,都是从队首出队。但在优先队列内部,数据项的次序是由它们的“优先级”来确定的:有最高优先级的数据项排在队首,而优先级最低的数据项则排在队尾。这样,优先队列的入队(Enqueue)操作就需要将数据项挤到队列前方。

完全二叉树:指每个内部节点都有两个子节点,最多可有一个节点例外。

如果完全树的节点在列表中的位置为p(p>0),那么其左子节点的位置就为2p,右子节点的位置就为2p+1。

找任意节点的父节点的方法:若节点在列表中的位置为n,那么其父节点的位置就是n//2。

堆次序:是指堆中任意一个节点x,其父节点p中的key(节点值)均小于或等于x中的key。

# 自定义最小堆类
class BinHeap(object):
	# 构造二叉堆
	def __init__(self):
		# 表首下标为0的项并没有用到,但为了后面代码可以用到简单的整数乘除法,仍保留它
		self.heapList = [0]			
		self.currentSize = 0

	# 上浮函数,i为节点位置,判断新节点是否比父节点小,若小则新节点交换上浮以保证堆次序
	def percUp(self, i):
		while i // 2 > 0:				#若父节点的位置大于0,则循环
			if self.heapList[i] < self.heapList[i // 2]:	#若子节点值小于父节点值&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值