Q:

Given array representation of min Heap, convert it to max Heap in O(n) time

# A Python3 program to convert min Heap 
# to max Heap  
  
# to heapify a subtree with root  
# at given index  
def MaxHeapify(arr, i, n): 
    l = 2 * i + 1
    r = 2 * i + 2
    largest = i  
    if l < n and arr[l] > arr[i]:  
        largest = l 
    if r < n and arr[r] > arr[largest]:  
        largest = r  
    if largest != i: 
        arr[i], arr[largest] = arr[largest], arr[i]  
        MaxHeapify(arr, largest, n) 
  
# This function basically builds max heap  
def convertMaxHeap(arr, n): 
      
    # Start from bottommost and rightmost  
    # internal mode and heapify all  
    # internal modes in bottom up way  
    for i in range(int((n - 2) / 2), -1, -1): 
        MaxHeapify(arr, i, n) 
  
# A utility function to print a  
# given array of given size  
def printArray(arr, size): 
    for i in range(size): 
        print(arr[i], end = " ") 
    print() 
  
# Driver Code 
if __name__ == '__main__': 
      
    # array representing Min Heap  
    arr = [3, 5, 9, 6, 8, 20, 10, 12, 18, 9]  
    n = len(arr) 
  
    print("Min Heap array : ")  
    printArray(arr, n)  
  
    convertMaxHeap(arr, n)  
  
    print("Max Heap array : ")  
    printArray(arr, n) 
  
# This code is contributed by PranchalK 
0

New to Communities?

Join the community