最大堆數組

最大堆(Max-Heap)是一種二叉堆,其中每個父節點的值都不小於其子節點的值。最大堆可以通過調整數組中的元素來實現,這種方法稱為「堆化」。堆化的數組滿足以下條件:

  1. 對於每個索引i,其父節點索引 floor((i-1)/2) 的值不小於數組中索引i的值。
  2. 對於每個索引i,其左子節點索引 2i+1 和右子節點索引 2i+2 的值都不大於數組中索引i的值。

最大堆數組的結構可以用以下代碼表示:

import heapq

def build_max_heap(array):
    # 將數組轉換為最大堆
    for i in range(len(array) // 2, -1, -1):
        heapq.heapify(array, i)

def is_max_heap(array):
    # 檢查數組是否為最大堆
    for i in range(len(array) // 2, -1, -1):
        if array[i] < array[i * 2 + 1] or array[i] < array[i * 2 + 2]:
            return False
    return True

# 示例數組
array = [4, 1, 3, 2, 16, 9, 10, 14, 8, 7]

# 堆化數組
build_max_heap(array)

# 檢查數組是否為最大堆
print(is_max_heap(array))  # 輸出: True

在上面的代碼中,build_max_heap 函數使用 heapq 模塊中的 heapify 方法將數組轉換為最大堆。is_max_heap 函數檢查數組是否滿足最大堆的條件。

請注意,最大堆的定義要求父節點的值不小於其子節點的值,這與二叉搜尋樹的特性不同,在二叉搜尋樹中,左子樹的值小於根節點的值,根節點的值小於右子樹的值。