最小堆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()
方法刪除並返回堆中的最小元素。