最小堆leetcode

最小堆是一種特殊的樹形數據結構,它按照值的大小對元素進行排序,並且始終保持每個父節點的值都小於或等於其子節點的值。在最小堆中,父節點的值通常是最小的。

最小堆的算法和實現可以通過多種程式語言來實現,包括Python、Java、C++等。以下是一個使用Python實現最小堆的示例代碼:

class MinHeap:
    def __init__(self):
        self.heap = []

    def parent(self, i):
        return (i - 1) // 2

    def leftChild(self, i):
        return 2 * i + 1

    def rightChild(self, i):
        return 2 * i + 2

    def insert(self, value):
        self.heap.append(value)
        i = len(self.heap) - 1
        while i != 0 and self.heap[self.parent(i)] > self.heap[i]:
            self.heap[i], self.heap[self.parent(i)] = self.heap[self.parent(i)], self.heap[i]
            i = self.parent(i)

    def deleteMin(self):
        if len(self.heap) == 0:
            return None
        min_val = self.heap[0]
        self.heap[0] = self.heap[-1]
        del self.heap[-1]
        self.heapify(0)
        return min_val

    def heapify(self, i):
        l = self.leftChild(i)
        r = self.rightChild(i)
        smallest = i
        if l < len(self.heap) and self.heap[l] < self.heap[smallest]:
            smallest = l
        if r < len(self.heap) and self.heap[r] < self.heap[smallest]:
            smallest = r
        if smallest != i:
            self.heap[i], self.heap[smallest] = self.heap[smallest], self.heap[i]
            self.heapify(smallest)

這個代碼實現了一個最小堆類,包括插入元素、刪除最小元素和調整堆結構的方法。你可以使用這個類來創建最小堆對象,並使用這些方法來操作堆中的元素。例如,你可以創建一個最小堆對象,然後使用insert()方法將元素插入堆中,使用deleteMin()方法刪除並返回堆中的最小元素。