美文网首页
最大堆最小堆怎么删除和添加

最大堆最小堆怎么删除和添加

作者: LittleBear_6c91 | 来源:发表于2019-04-25 19:28 被阅读0次

最大堆和最小堆是:二叉堆的两种形式。
最大堆:根结点的键值是所有堆结点键值中最大者,且每个结点的值都比其孩子的值大。

最小堆:根结点的键值是所有堆结点键值中最小者,且每个结点的值都比其孩子的值小。

image.png

最大堆的插入
最大堆的插入的思想就是先在最后的结点添加一个元素,然后沿着树上升。跟最大堆的初始化大致相同。

MaxHeap<T> &Insert(const T&x)
{
if(CurrentSize == MaxSize)
exit(1); //没有足够空间

    //为x寻找应插入位置  
    //i从新的叶节点开始,并沿着树上升  
    int i = ++ CurrentSize;  
    while(i != 1 && x > heap[i/2])  
    {  
        //不把x放进heap[i]  
        heap[i] = heap[i/2];        //元素下移  
        i /= 2;     //移向父节点  
    }  
    heap[i] = x;        //这时候才把x放进去  
    return *this;  
}  

最大堆的删除
最大堆的删除,即删除最大的元素。我们先取最后的元素提到根结点,然后删除最大值,然后再把新的根节点放到合适的位置

MaxHeap<T> &DeleteMax(T &x)
{
//检查堆是否为空
if(CurrentSize == 0)
exit(1); //队列空

    x = heap[1];        //最大元素  
    T y = heap[CurrentSize--];      //最后一个元素  
    //从根开始,重构大堆  
    int i = 1, ci = 2;      //ci为i的儿子  
    while(ci < CurrentSize)  
    {  
        if(ci < CurrentSize && heap[ci] < heap[ci + 1])           //比较两个子节点大小,取其大  
            ci ++;  
        //能否放y  
        if(heap[ci] > y)     //不能  
        {  
            heap[i] = heap[ci];     //孩子上移  
            i = ci;                 //下移一层  
            ci *= 2;  
        }  
        else            //能  
            break;  
    }  
    heap[i] = y;  
    return *this;  
}  

相关文章

  • 最大堆最小堆怎么删除和添加

    最大堆和最小堆是:二叉堆的两种形式。最大堆:根结点的键值是所有堆结点键值中最大者,且每个结点的值都比其孩子的值大。...

  • 最大堆和最小堆

    标签(空格分隔): 数据结构与算法 定义: 它是一颗完全二叉树,它可以是空树中结点的值总是不大于或者不小于其孩子结...

  • 最大堆和最小堆

    https://www.jianshu.com/p/62b651797ad8

  • python 堆和堆排序

    简介 堆是一种完全二叉树,有最大堆和最小堆两种。 最大堆: 每个节点,都比叶子节点大,如: 最小堆:和最大堆相反 ...

  • 02-13:leetcode重刷5之最大堆/最小堆

    1、最大堆/最小堆结构 (1)最大堆 堆顶元素最大,其他元素都小于等于:堆顶 (2)最小堆 堆顶元素最小,其他元素...

  • 295. Find Median from Data Strea

    维护最大堆与最小堆 最大堆:堆顶元素是所有节点里面最大的。最小堆,对顶元素是所有节点里面最小的。用最大堆存放数据流...

  • 排序(六)— 堆排序

    堆排序基本思想是:堆分为最大堆和最小堆,其实就是完全二叉树。最大堆要求节点的元素都要不小于其孩子,最小堆要求节点元...

  • 树4,二叉树的特例——堆

    堆分为最大堆和最小堆。在最大堆中根节点的值最大,在最小堆中根节点的值最小。有很多需要快速找到最大值或者最小值的问题...

  • 二叉堆

    二叉堆是优先队列很普遍的一种实现,它又分为最小堆最大堆,最小堆和最大堆都是完全二叉树。其结构体定义如下: 二叉堆的...

  • 数据结构之「堆」

    堆 堆 是一种特殊的完全二叉树结构,通常,它有两种类型:最小堆 和 最大堆。 最小堆(min heap)是父节点的...

网友评论

      本文标题:最大堆最小堆怎么删除和添加

      本文链接:https://www.haomeiwen.com/subject/vdktnqtx.html