数据结构之堆

堆(heap)

  • 定义

   堆是一种比较特殊的数据结构,它是利用完全二叉树的结构来维护一组数据,可以看做是一棵树的数组对象,说白了,堆就是用数组实现的二叉树。根据根节点的值还分为大根堆小根堆。在最大堆中,父节点的值比每一个子节点的值都要大。在最小堆中,父节点的值比每一个子节点的值都要小。例如下图就是一个大根堆:

                        

 

 

  • 堆和二叉树的区别

   虽然说堆是利用完全二叉树的结果来维护数据,但和二叉树还是有较大差别的:

    1. 节点的大小和顺序:在二叉树中,左子节点必须比父节点小,右子节点必须必比父节点大。但是在堆中并非如此。在最大堆中两个子节点都必须比父节点小,而在最小堆中,它们都必须比父节点大。
    2. 内存占用:普通树占用的内存空间比它们存储的数据要多,因为需要为节点对象分配指针;而堆只需要数组对象,不需要指针
    3. 搜索:在二叉树中搜索会很快,但是在堆中搜索会很慢。在堆中搜索不是第一优先级,因为使用堆的目的是将最大(或者最小)的节点放在最前面,从而快速的进行相关插入、删除操作。

 

     

posted @ 2020-05-24 15:01  发育中的程序猿  阅读(166)  评论(0编辑  收藏  举报