1
+ """MaxHeap implementation using python"""
2
+
3
+
4
+ class MaxHeap (object ):
5
+
6
+ HEAP_SIZE = 10
7
+
8
+ def __init__ (self ):
9
+ self .heap = [0 ]* MaxHeap .HEAP_SIZE
10
+ self .currentPosition = - 1
11
+
12
+ def _swap (self ,i ,j ):
13
+ self .heap [i ], self .heap [j ] = self .heap [j ], self .heap [i ]
14
+
15
+ def _heapIsFull (self ):
16
+ if self .currentPosition == MaxHeap .HEAP_SIZE :
17
+ return True
18
+ return False
19
+
20
+ def insert (self , item ):
21
+ if self ._heapIsFull ():
22
+ "Heap is full..."
23
+ return
24
+ self .currentPosition += 1
25
+ self .heap [self .currentPosition ] = item
26
+ # adjust parent node item
27
+ self ._bubbleUp (self .currentPosition )
28
+
29
+ def _bubbleUp (self , currentPosition ):
30
+ index = currentPosition
31
+ parrentIndex = index // 2
32
+
33
+ if parrentIndex >= 0 and self .heap [parrentIndex ] < self .heap [index ]:
34
+ self ._swap (parrentIndex , index )
35
+ # index = parrentIndex
36
+ self ._bubbleUp (parrentIndex )
37
+
38
+
39
+ def getMax (self ):
40
+ if self .heap [0 ]:
41
+ return self .heap [0 ]
42
+ else :
43
+ return "Empty Heap"
44
+
45
+ def pop (self ):
46
+ if self .currentPosition > 1 :
47
+ # swap first element with last element
48
+ self ._swap (0 ,self .currentPosition )
49
+ del self .heap [self .currentPosition ]
50
+ # adjust parent node item
51
+ self ._bubbleDown (0 )
52
+ elif self .currentPosition == 1 :
53
+ del self .heap [0 ]
54
+ else :
55
+ print "No deletion operation for empty heap"
56
+ return "False"
57
+
58
+ def _bubbleDown (self , index ):
59
+ left = 2 * index + 1
60
+ right = 2 * index + 2
61
+ largest = index
62
+ if len (self .heap ) > left and self .heap [largest ] < self .heap [left ]:
63
+ largest = left
64
+ if len (self .heap ) > right and self .heap [largest ] < self .heap [right ]:
65
+ largest = right
66
+ if largest != index :
67
+ self ._swap (index , largest )
68
+ self ._bubbleDown (largest )
69
+
70
+ def printHeap (self ):
71
+ all_hp_element = []
72
+ for i in self .heap :
73
+ if i != 0 :
74
+ all_hp_element .append (i )
75
+ return all_hp_element
76
+
77
+
0 commit comments