考虑一个完整的二叉树,其中根的左和右子树是max-heaps。将树转换为堆的操作数的下限是
(A) Ω(登录)
(B) Ω(n)
[C) Ω(nlogn)
(D) Ω(n 2 )答案: (A)
说明:这个问题的答案仅仅是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);
}
}
有关详细信息,请参见二进制堆。
这个问题的测验