Definitions

max tree

부모가 자식들보다 큰 트리

max heap

완전이진트리인 max tree

min tree

부모가 자식들보다 작은 트리

min heap

완전이진트리인 min tree

heap은 array로 구현!

그래야 장점이 살아남ㅇㅇ

인덱스를 통해 parent child O(1)에 바꿀 수 있음

Insertion

void insert_max_heap(element item, int *n) {
	/* insert item into a max heap of current size *n */
	int i;
	if(HEAP_FULL(*n)) {
		fprintf(stderr, "The heap is full.\\n");
		exit(1);
	}
	i = ++(*n);
	while((i != 1) && (item.key > heap[i/2].key)) {
		heap[i] = heap[i/2]; // 부모걸 가져옴
		i /= 2;
	}
	heap[i] = item; // 최종 위치에 삽입
}

0번째 인덱스는 비우는 듯

Deletion

끝 노드를 루트로 가져오고 insertion 로직과 비슷하게 위치 재설정

위치 재설정 시 자식노드들 중 더 큰 것과 swap

element delete_max_heap(int *n) {
	/* delete element with the highest key from the heap */
	int parent, child;
	element item, temp;
	if(HEAP_EMPTY(*n)) {
		fprintf(stderr, "The heap is empty");
		exit(1);
	}
	/* save value of the element with the largest key */
	item = heap[1];
	/* use the last element in the heap to adjust heap */
	temp = heap[(*n)--];
	parent = 1;
	child = 2;
	while(child <= *n) {
		/* find the larger child of the current parent */
		if((child < *n) && (heap[child].key < heap[child+1].key)) child++;
		if(temp.key >= heap[child].key) break;
		/* move to the next lower level */
		heap[parent] = heap[child];
		parent = child;
		child *= 2;
	}
	heap[parent] = temp;
	return item;
}