zoukankan      html  css  js  c++  java
  • 什么是堆?

    堆就是用数组实现的二叉树,它没有使用父指针或者子指针。

    堆的分类?

    堆(heap)分为小根堆和大根堆两种,对于小根堆(根节点小于左节点或者右节点)它是具有如下特性的一颗完全二叉树:
    1、若树根存在左孩子,则根节点的值小于等于左孩子结点的值;
    2、若树根存在右孩子,则根节点的值小于等于右孩子结点的值;
    3、以左、右孩子为根的子树又各是一个堆。

    小根堆

     

      

     大根堆

    堆和二叉树的区别?

    节点的顺序在二叉搜索树中,左子节点必须比父节点小,右子节点必须必比父节点大。但是在堆中并非如此。在最大堆中两个子节点都必须比父节点小,而在最小堆中,它们都必须比父节点大。

    内存占用:普通树占用的内存空间比它们存储的数据要多。你必须为节点对象以及左/右子节点指针分配额为是我内存。堆仅仅使用一个数据来村塾数组,且不使用指针。

    平衡二叉搜索树必须是“平衡”的情况下,其大部分操作的复杂度才能达到O(log n)。你可以按任意顺序位置插入/删除数据,或者使用 AVL 树或者红黑树,但是在堆中实际上不需要整棵树都是有序的。我们只需要满足对属性即可,所以在堆中平衡不是问题。因为堆中数据的组织方式可以保证O(log n) 的性能。

    搜索。在二叉树中搜索会很快,但是在堆中搜索会很慢。在堆中搜索不是第一优先级,因为使用堆的目的是将最大(或者最小)的节点放在最前面,从而快速的进行相关插入、删除操作。

    使用场景:

    1、宜采用顺序存储
    2、查找最大值或最小值最为方便
    3、插入或删除一个结点的时间复杂度为O(lbn)(lbn 已2为底n的对数)如log2 

  • 相关阅读:
    C++ String详解
    乏力的编码很累,这里有私货..
    给自己~~微语&&歌单
    2019CSP-J第二轮 B题C题
    HDU 3966 树链剖分+树状数组 模板
    HDU 2255 KM算法 二分图最大权值匹配
    HDU 4280 ISAP+BFS 最大流 模板
    HDU 6181 第k短路
    假装会python--爬取贴吧正文
    HDU 6170 dp
  • 原文地址:https://www.cnblogs.com/fanBlog/p/13038697.html
Copyright © 2011-2022 走看看