最小堆實現
最小堆是一種特殊的樹形數據結構,其每個父節點的值都小於或等於其孩子節點的值。以下是一種簡單的方法來實現最小堆:
首先,定義一個節點類,該類至少應包含一個數據欄位和一個指向其子節點的指針列表。節點類可能還包含其他屬性,如比較運算符以進行排序等。
以下是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()
方法對堆進行排序。注意,這個實現沒有處理刪除元素的操作,如果需要,可以相應地添加。