zoukankan      html  css  js  c++  java
  • 关于堆

    关于堆

    堆本质上是用数组实现的二叉树。

    大根堆:一棵完全二叉树,满足任一节点都比其子节点大;用于升序排列

    小根堆:一棵完全二叉树,满足任一节点都比其他子节点小;用于降序排列

    1570680278068

    如何用数组实现堆?

    节点在数组中的位置index 和它的父节点以及子节点的索引之间有一个映射关系。

    parent(i) = floor((i - 1)/2)             //floor函数表示向下取整
    left(i)   = 2i + 1
    right(i)  = 2i + 2
    
    [ 10, 7, 2, 5, 1 ]
    
    Node Array index (i) Parent index Left child Right child
    10 0 -1 1 2
    7 1 0 3 4
    2 2 0 5 6
    5 3 1 7 8
    1 4 1 9 10

    使用数组索引代替指针,节约了空间,但是需要进行更多的计算。(这就是交易)

  • 相关阅读:
    信号
    test
    keil4打开keil5工程卡死问题
    day01
    SSH问题
    QT_day02
    QT_day01
    C++_day9am
    文件描述符与重定向
    C++_day8pm_多态
  • 原文地址:https://www.cnblogs.com/noneplus/p/11815634.html
Copyright © 2011-2022 走看看