📜  门| GATE-CS-2015(套装2)|问题 27

📅  最后修改于: 2021-09-25 07:02:14             🧑  作者: Mango

考虑一个完整的二叉树,其中根的左子树和右子树是最大堆。将树转换为堆的操作数的下限是
(A) Ω(logn)
(B) Ω(n)
(C) Ω(nlogn)
(D) Ω(n 2 )答案:(一)
说明:这个问题的答案很简单,就是 max-heapify 函数。 max-heapify 的时间复杂度是 O(Log n),因为它最多通过堆的高度递归。

// A recursive method to heapify a subtree with root at given index
// This method assumes that the subtrees are already heapified
void MinHeap::MaxHeapify(int i)
{
    int l = left(i);
    int r = right(i);
    int largest = i;
    if (l < heap_size && harr[l] < harr[i])
        largest = l;
    if (r < heap_size && harr[r] < harr[smallest])
        largest = r;
    if (largest != i)
    {
        swap(&harr[i], &harr[largest]);
        MinHeapify(largest);
    }
}

有关详细信息,请参阅二进制堆。
这个问题的测验