
힙은 완전이진트리구조를 지닌 특별한 형태의 트리입니다.
힙의 모든 노드는 자신의 부모 노드보다 크거나 작은 값을 가집니다.
힙은 주로 우선순위 큐를 구현하기 위해 사용됩니다.
힙은 일반적으로 2가지 형태를 가집니다.
Max-Heap
Max-Heap에서는 루트 노드가 가장 큰 값을 지니고 모든 노드는 무조건 자식 노드보다 큰 값을 가집니다.
Min-Heap
Min-Heap에서는 루트 노드가 가장 작은 값을 지니고 모든 노드는 무조건 부모 노드보다 큰 값을 가집니다.
참고할 사항이 있습니다. Max-Heap과 Min-Heap은 Operations에 있어서 원리는 완전히 똑같습니다.
Heapify
Heapify는 요소들을 재배치하여 힙 구조에 맞는 순서를 가지게 하는 것입니다.
이는 힙에 노드가 만들어졌을 때 힙의 특성을 만족하지 못한다면 실행되는 연산입니다.
Insertion
힙에 값을 삽입합니다.
만약 여기서 값의 삽입이 힙의 특성을 지키지 못한다면 Heapify를 합니다.
Deletion
힙에서는 언제나 요소의 삭제가 루트 노드에서 일어납니다.
루트 노드에서 삭제가 일어나면 힙의 특성이 깨지기 때문에 Heapify를 합니다.
getMax Or getMin
Max-Heamp에서 가장 큰 값을 가져오거나 Min-Heap에서 가장 작은 값을 가져옵니다.
removeMin Or removeMax
Max-Heap에서 가장 큰 값을 삭제하거나 Min-Heap에서 가장 작은 값을 삭제합니다.