# Max_Heap 구현 classHeap: def__init__(self, data=None): self.data = data or [] for i in range(len(self.data)//2, -1, -1): self._max_heap_check(i) def__repr__(self): return repr(self.data) defparent(self, i): if i == 0: return ('this node is root node') if i%2 == 0: return (i-2)//2 else: return (i-1)//2 defleft_child(self, i): return i*2+1 defright_child(self, i): return i*2+2 def_max_heap_check(self, i): largest = i print("start!", largest) left = self.left_child(i) right = self.right_child(i) n = len(self.data) largest = (left < n and self.data[left] > self.data[i]) and left or i print(largest) largest = (right < n and self.data[right] > self.data[largest]) and right or largest print(largest) if i isnot largest: self.data[i], self.data[largest] = self.data[largest], self.data[i] print("----", largest) self._max_heap_check(largest) defextract(self): max_value = self.data[0] self.data[0] = self.data[-1] del self.data[-1] self._max_heap_check(0) return max_value definsert(self, item): i = len(self.data) self.data.append(item) while (i != 0) and item > self.data[self.parent(i)]: print("!!!!!!", self.data) self.data[i] = self.data[self.parent(i)] i = self.parent(i) self.data[i] = item