코드 11-4는 pop() 메서드를 구현한 것입니다. 루트에 있는 키를 반환하고 빈 루트에 트리의 맨 마지막 원소를 임시로 올립니다. 자식 노드의 키 값과 비교하며 자신의 위치를 찾아갑니다. 알고리즘의 작동 방식을 그림과 비교해 보시기 바랍니다.
이제 테스트 코드로 잘 작동하는지 확인해 보겠습니다.
코드 11-5
# 힙 내부에 있는 arr을
# 직접 확인하는 함수
def print_heap(h):
for i in range(1, h.heapsize+1):
print("{}".format(h.arr[i].key), end=" ")
print()
if __name__ == "__main__":
h = MaxHeap()
h.push(Element(2))
h.push(Element(14))
h.push(Element(9))
h.push(Element(11))
h.push(Element(6))
h.push(Element(8))
print_heap(h)
while not h.is_empty():
rem = h.pop()
print(f"poped item is {rem.key}")
print_heap(h)