美文网首页
认识二叉堆

认识二叉堆

作者: Uzero | 来源:发表于2018-10-06 14:02 被阅读0次

什么是二叉堆?

        二叉堆本质上是一种完全二叉树( 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树),它分为两个类型:

二叉堆的根节点叫做堆顶

最大堆:最大堆当中任何一个父节点的值,都大于等于它左右孩子节点的值。最大堆的堆顶是整个堆中的最大元素

最大堆

最小堆:最小堆当中任何一个父节点的值,都小于等于它左右孩子节点的值。最小堆的堆顶是整个堆中的最小元素

最小堆

堆的自我调整:

一、插入节点

    二叉堆节点的插入,插入位置是完全二叉树的最后一个位置。

二、删除节点

    二叉堆节点的删除过程和插入过程正好相反,所删除的是处于堆顶的节点。

三、构建二叉堆

    构建二叉堆,也就是把一个无序的完全二叉树调整为二叉堆,本质上就是让所有非叶子节点依次下沉。

二叉堆虽然是一颗完全二叉树,但它的存储方式并不是链式存储,而是顺序存储。换句话说,二叉堆的所有节点都存储在数组当中。

数组中,在没有左右指针的情况下,如何定位到一个父节点的左孩子和右孩子呢?

假设父节点的下标是index,那么它的左孩子下标就是 2*index+1;它的右孩子下标就是  2*index+2 。

如下图节点6包含9和10两个孩子,节点6在数组中的下标是3,节点9在数组中的下标是7,节点10在数组中的下标是8。7 = 3*2+1   8 = 3*2+2

构建最小二叉堆

构建最大二叉堆

插入节点(上浮)

二叉堆的几种应用

1、优先级队列

2、堆排序

3、Top N问题

相关文章

  • 认识二叉堆

    什么是二叉堆? 二叉堆本质上是一种完全二叉树( 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引...

  • 用go实现二叉堆插入删除构建

    二叉堆的插入: 二叉堆的删除: 二叉堆的构建:

  • [数据结构与算法-iOS 实现]二叉堆原理实现及top k 问题

    二叉堆 demo 二叉堆其实就是一颗完全二叉树,所以又可以叫做完全二叉堆 二叉堆的底层可以用数组来实现 对于二叉堆...

  • 二叉堆

    二叉堆定义 二叉堆是一种特殊的堆, 二叉堆是完全二叉树或者近似完全二叉树. 二叉堆满足堆特性: 父节点的键值总是保...

  • 二叉堆(Binary Heap)

    二叉堆这个数据结构有点意思,自己做了个总结,内容结构如下: 二叉堆性质 二叉堆操作 应用 二叉堆性质: 堆(Hea...

  • 堆排序(下):最大堆

    二叉堆,简称堆 Heap 尖的完全二叉树。也有三叉堆以及普通堆,但大部分时候堆就是指二叉堆 二叉堆的定义 一棵完全...

  • 二叉堆的Python实现

    二叉堆(binary heap)是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足堆特性:父节点的...

  • PriorityQueue源码学习

    一.初步认识 PriorityQueue的底层实现是基于二叉堆,在进行add(),poll(),removeAt(...

  • Sort.堆排序(heapsort) & 优先队列

    二叉堆 这个二叉堆和先进后出的那个堆不是一个。而且这个二叉堆从下标1开始存储元素。 这里的二叉堆是个数组,也可以看...

  • 二叉树(二)-二叉堆

    1.什么是二叉堆 二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树)。二叉堆有两种:...

网友评论

      本文标题:认识二叉堆

      本文链接:https://www.haomeiwen.com/subject/ymrqaftx.html