数据结构—二叉堆

二叉堆是一种特殊的树形数据结构,每个父节点的值大于等于或小于等于其子节点。通常以数组形式存储,分为最大堆和最小堆。堆的创建涉及对数组的重新排列以满足堆的特性,插入操作需要通过上浮保持堆有序性,删除操作则通过下沉和调整恢复堆的结构。堆在优先级队列、Top K问题和堆排序中有广泛应用。
摘要由CSDN通过智能技术生成

二叉堆:

每个父节点的值都大于等于(或者小于等于)其两个孩子的值,那么就称这种特殊的数据结构为二叉堆

二叉堆数据结构是一种数组对象,把它可以看作一棵完全二叉树结构或近似二叉树结构。在逻辑层面二叉堆是一种特殊的树形数据结构,一般用数组存储二叉堆的节点元素,所以在物理层面二叉堆是一个数组

二项式堆,斐波纳契堆等其它堆用的较少,一般将二叉堆简称为堆(以下表述中直接说堆了)

堆满足的两个特征:

  1. 父节点的键值大于或等于(小于或等于) 任何一个子节点的键值
  2. 每个节点的左子树和右子树都是一个堆(最大堆或最小堆)

 当父节点的键值大于或等于左右孩子节点的键值是称为最大堆

 当父节点的键值小于或等于左右孩子节点的键值时称为最小堆

 注意:堆中两个孩子之前的大小没有关系,可能左孩子>=右孩子,也可能右>=左

堆的存储:

堆一般存储在下标为0开始的数组中,下图是一个小堆的存储

因此在堆中给定下标为i的结点时:
如果i=0,结点i是根节点,没有双亲节点;否则结点i的双亲结点为(i-1)/2

如果2 * i + 1 <= n - 1,则结点i的左孩子为结点2 * i + 1,否则结点i无左孩子

如果2 * i + 2 <&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值