diff --git a/heaps/heap.py b/heaps/heap.py new file mode 100644 index 0000000..4b376f4 --- /dev/null +++ b/heaps/heap.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# author: bt3gl + +class Heap: + + def __init__(self): + + self.heap = [] + + def heapify(self, n, i): + + largest = i + left_children = 2 * i + 1 + right_children = 2 * i + 2 + + if left_children < n and self.heap[i] < self.heap[left_children]: + largest = left_children + + if right_children < n and self.heap[largest] < self.heap[right_children]: + largest = right_children + + if largest != i: + self.heap[i], self.heap[largest] = self.heap[largest], self.heap[i] + self.heapify(n, largest) + + + def insert(self, num): + + size = len(self.heap) + + if size == 0: + self.heap.append(num) + + else: + self.heap.append(num) + for i in range((size // 2) - 1, -1, -1): + self.heapify(size, i) + + + def delete_node(self, num): + + size = len(self.heap) + + i = 0 + for i in range(size): + if num == self.heap[i]: + break + + self.heap[i], self.heap[size - 1] = self.heap[size - 1], self.heap[i] + + self.heap.remove(size - 1) + + for i in range((len(self.heap) // 2) - 1, -1, -1): + self.heapify(len(self.heap), i) + + + +if __name__ == '__main__': + + h = Heap() + for n in [10, 4, 9, 8, 1, 2]: + h.insert(n) + + print (f'Max-heap array: {h.heap}') + + n = 2 + h.delete_node(n) + print(f'After deleting {n}: {h.heap}')