如何使用buildHeap方法和insert方法构建最小堆?

时间:2018-07-26 12:58:02

标签: c++ arrays heap

我是编程新手,我想学习什么是最小堆以及如何使用buildHeap方法和insert方法查找给定数组的最小堆

1 个答案:

答案 0 :(得分:0)

要学习Min Heap,您必须首先了解Binary Heap是什么。
二进制堆是具有以下属性的二进制树。
1)这是一棵完整的树(除了最后一个级别,所有级别都已完全填充,并且最后一个级别的所有键都尽可能保留)。二进制堆的此属性使它们适合存储在数组中。

2)二进制堆是“最小堆”或“最大堆”。在最小二进制堆中,在二进制堆中存在的所有密钥中,根密钥必须最小。对于二叉树中的所有节点,相同的属性必须递归地为true。
要将元素“ K”插入最小堆:

void MinHeap::insertKey(int k)
{
    if (heap_size == capacity)
    {
        cout << "\nOverflow\n";
        return;
    }
    heap_size++;
    int i = heap_size - 1;
    harr[i] = k;
    while (i != 0 && harr[parent(i)] > harr[i])
    {
       swap(&harr[i], &harr[parent(i)]);
       i = parent(i);
    }
}

我不知道任何buildheapinsert函数,但是出于同一目的,c ++ stl具有make_heap()push_heap()函数。 Heap c++ implementation