zoukankan      html  css  js  c++  java
  • 大顶堆构造过程

    大顶堆性质

    堆是一种特殊的完全二叉树,使用数组存储二叉树时,若某个非叶子节点存储在下标为i的位置,其左右孩子节点分别存储在下标为2i+1和2i+2的位置。

    堆可以分为大顶堆和小顶堆,对大顶堆来说,任意非叶子节点不小于其左右孩子节点,对于小顶堆来说,任意非叶子节点不大于其左右孩子节点。若使用数组存储大顶堆,则满足:arr[i] >= arr[2i+1] && arr[i] >=arr[2i+2](i为非叶子节点的在数组中的下标)


     构造大顶堆

    基本思想:

    1、从最后一个非叶子节点开始,逐一比较非叶子节点和其左右孩子节点

    2、根据比较结果交换节点

    3、因为交换可能导致孩子节点不再满足大顶堆的性质,所以需要对孩子节点进行调整。

    例子:

     

    初始

    从最后一个非叶子结点开始,分别比较非叶结点和其左右孩子节点的大小。

     

    无需调整

     

    无需调整

     

    无需调整

    需要交换元素

     

    无需调整

     

    交换元素位置

     

     

    交换后可能造成被交换的孩子节点不满足堆的性质,因此每次交换后需要重新对交换的孩子节点进行调整。

     
     
     
     
     

     

    大顶堆建立完成

  • 相关阅读:
    [Json.net]忽略不需要的字段
    [c#]exchange回复,全部回复,转发所遇到的问题
    [c#]获取exchange中的图片
    [c#基础]AutoResetEvent
    [C#基础]c#中的BeginInvoke和EndEndInvoke
    [CentOs7]安装mysql
    [CentOS7]安装mysql遇到的问题
    [CentOs7]图形界面
    [CentOS]添加删除用户
    在虚机中安装CentOS
  • 原文地址:https://www.cnblogs.com/XiaoZhengYu/p/12492445.html
Copyright © 2011-2022 走看看