最小堆實現

最小堆是一種特殊的樹形數據結構,其每個父節點的值都小於或等於其孩子節點的值。以下是一種簡單的方法來實現最小堆:

首先,定義一個節點類,該類至少應包含一個數據欄位和一個指向其子節點的指針列表。節點類可能還包含其他屬性,如比較運算符以進行排序等。

以下是Python實現的最小堆的簡單示例:

class Node:
    def __init__(self, key):
        self.left = None
        self.right = None
        self.val = key

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

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

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

    def swap(self, i, j):
        self.heap[i], self.heap[j] = self.heap[j], self.heap[i]

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

    def heapify(self, i):
        l = self.leftChild(i)
        r = l if l != -1 else -1
        smallest = i  # Initialize smallest as root node initially
        if l != -1 and self.heap[l].val < self.heap[i].val:
            smallest = l
        if r != -1 and self.heap[r].val < self.heap[smallest]:
            smallest = r
        if smallest != i:
            self.swap(i, smallest)
            self.heapify(smallest)

    def getMin(self):
        return self.heap[0] if self.heap else None

使用這個類,你可以創建一個最小堆對象,然後使用insert()方法添加元素,使用getMin()方法獲取最小元素。此外,還可以使用heapify()方法對堆進行排序。注意,這個實現沒有處理刪除元素的操作,如果需要,可以相應地添加。