Min Heap
Insertion Into Min Heap
Code:
class MinHeap:
def __init__(self):
self.heap_list = [0]
self.current_size = 0
def print_(self):
return self.heap_list
def sift_up(self, i):
while i // 2 > 0:
if self.heap_list[i] < self.heap_list[i // 2]:
self.heap_list[i], self.heap_list[i // 2] = self.heap_list[i // 2], self.heap_list[i]
i = i // 2
def insert(self, k):
self.heap_list.append(k)
self.current_size += 1
# Move Element up the Heap
self.sift_up(self.current_size)
my_heap = MinHeap()
my_heap.insert(10)
my_heap.insert(30)
my_heap.insert(20)
my_heap.insert(35)
my_heap.insert(40)
my_heap.insert(32)
print("Before inserting 8")
print(my_heap.print_())
print("After inserting 8")
my_heap.insert(8)
print(my_heap.print_())
Deletion of Minimum Value in Min Heap:
Code:
class MinHeap:
def __init__(self):
self.heap_list = [0]
self.current_size = 0
def print_(self):
return self.heap_list
def sift_up(self, i):
while i // 2 > 0:
if self.heap_list[i] < self.heap_list[i // 2]:
self.heap_list[i], self.heap_list[i // 2] = self.heap_list[i // 2], self.heap_list[i]
i = i // 2
def insert(self, k):
self.heap_list.append(k)
self.current_size += 1
self.sift_up(self.current_size)
def sift_down(self, i):
while (i * 2) <= self.current_size:
mc = self.min_child(i)
if self.heap_list[i] > self.heap_list[mc]:
self.heap_list[i], self.heap_list[mc] = self.heap_list[mc], self.heap_list[i]
i = mc
def min_child(self, i):
if (i * 2)+1 > self.current_size:
return i * 2
else:
if self.heap_list[i*2] < self.heap_list[(i*2)+1]:
return i * 2
else:
return (i * 2) + 1
def delete_min(self):
if len(self.heap_list) == 1:
return 'Empty heap'
root = self.heap_list[1]
self.heap_list[1] = self.heap_list[self.current_size]
*self.heap_list, _ = self.heap_list
self.current_size -= 1
self.sift_down(1)
return root
my_heap = MinHeap()
my_heap.insert(10)
my_heap.insert(30)
my_heap.insert(20)
my_heap.insert(35)
my_heap.insert(40)
my_heap.insert(32)
my_heap.insert(8)
print("Heap Before Deletion of Min Value")
print(my_heap.print_())
my_heap.delete_min()
print("\n Heap after Deletion of Min Value")
print(my_heap.print_())