二叉树--堆

本文介绍了堆数据结构,包括大顶堆和小顶堆的概念,以及如何在堆中插入和删除元素。堆排序的原理及时间复杂度进行了讨论,并对比了与快速排序的性能差异。此外,还探讨了堆在优先级队列、求Top K和中位数问题中的应用。
摘要由CSDN通过智能技术生成
  • 堆是一个完全二叉树;

  • 堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。

每个节点的值都大于等于子树中每个节点值的堆,我们叫做“大顶堆”。对于每个节点的值都小于等于子树中每个节点值的堆,我们叫做“小顶堆”。

完全二叉树比较适合用数组来存储。用数组来存储完全二叉树是非常节省存储空间的。单纯地通过数组的下标,就可以找到一个节点的左右子节点和父节点。数组中下标为i的节点的左子节点,就是下标为i*2的节点,右子节点就是下标为i∗2+1的节点,父节点就是下标为i/2的节点。

1.往堆中插入一个元素(从下往上堆化)

堆中插入数据22

 

public class Heap {
  private int[] a; // 数组,从下标1开始存储数据
  private int n;  // 堆可以存储的最大数据个数
  private int count; // 堆中已经存储的数据个数

  public Heap(int capacity) {
    a = new i
最小和最大都是二叉树的一种特殊形式。最小是指每个节点的值都小于或等于其子节点的值,而最大则相反,每个节点的值都大于或等于其子节点的值。最小的删除操作是删除最小值,也就是删除根节点。具体的操作是将最后一个节点替换到根节点的位置,然后自顶向下递归调整以满足最小的要求。最大的删除操作是删除最大值,也是先将最后一个节点提到根节点的位置,然后删除最大值,并将新的根节点放到适当的位置。 最小和最大的优势是可以在常数时间内访问最小或最大值,而使用数组则需要遍历查找最小或最大值,时间复杂度至少为O(n)。但是,维护最小或最大的结构需要额外的工作,这也带来了复杂度的花销。总的来说,最小和最大是一种对数据进行快速查找的数据结构。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [图解二叉(最小&最大)](https://blog.csdn.net/august5291/article/details/121120535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [数据结构——最大最小](https://blog.csdn.net/qq_50675813/article/details/117753225)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值