zoukankan      html  css  js  c++  java
  • 二叉堆的简单介绍

    二叉堆简介:
    优先队列是先进先出的模型
    二叉堆是实现优先队列的一种常用的方式,以下简称堆
    二叉堆是一颗完全填满的二叉树,完全二叉树的高为log(N)
    我们可以用一个数组表示完全二叉树(二叉堆)
    在这个数组中,对于任意i位置的元素,其左孩子在2i的位置上,其右孩子在2i+1位置上,其父节点在i/2位置上
     
    二叉堆的堆序性质
    极小堆
         让最小的元素在根节点,保证每个节点的数据都比父节点的要大。
    极大堆
         让最大的元素在根节点,保证每个节点的数据都比父节点的要小。
     
    基本操作:
    插入节点:采用上滤的方式:
    如图,我们将14插入到合适的位置
    操作如下:先在最后可以插入的位置(也就是当前数组的有效位置的下一个位置)插入一个空的节点,将14插入这个空节点,
    此时会破会极小堆的堆序,那么将此空节点的父节点插入空穴,再将14插入新的空穴,
    如此向上移动,会找到合适的位置,这种方式叫做上滤。相比交换操作减少了赋值的次数。
    删除节点:采用下滤的方式
    如图,删除根节点之后,我们需要试图把最后的节点放入合适的位置,
    其实,相对于在数组中而言,我们是在讲该树的某个子树全部进行向前移动,然后最后会空出一个节点给31,
    那么,接下来,找到根节点的孩子中较小的哪一个,进行插入根节点。
    再把新的空节点的子孩子中,较小的上移。
    一直到最后,把31插入最后的空节点中。这种方式成为下滤。
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
  • 原文地址:https://www.cnblogs.com/anzhi/p/7536397.html
Copyright © 2011-2022 走看看