최대 힙 삭제연산에 대하여
가람
element del_max_heap(HeapType *h)
{
int parent,child;
element item,temp;
item = h-heap[1];
temp = h-heap[(h-heap_size)--];
parent = 1;
child = 2;
while(child = h-heap_size){
if(child h-heap_size) &&
(h-heap[child].key h-heap[child+1].key)
child++;
if(temp.key = h-heap[child].key) break;
h-heap[parent] = h-heap[child];
parent = child;
child *= 2;
}
h-heap[parent] = temp;
return item;
}
※폰으로 써서 오타가 많을수도 있습니다.
삭제를 할 경우 맨위 루트노드를 삭제한 후 말단노드를 루트노드에 놓은 후 히프를 재구성하는 개념적인건 알겠는데 위 코드를 보면서 하니 해보는데 이해가 잘 안가서요..
4
/ \
3 2
/
1
라는 트리가 있을때 삭제연산을 수행합니다.
그러면 while문에서
child = 2 = h-heap_size = 4 를 만족하기 때문에 그 밑에 있는 코드를 수행합니다.
if((26)&&(3 2)) 이프문조건이 만족되지 않아 child++을 하지않습니다.
if(1 = 3) 이 또한 조건이 만족되지않으므로 break를 하지 않습니다.
h-heap[parent] = h-heap[child]; 에 의해
3
/ \
3 2
/
ㅣ
이렇게되고
부모는 2 자식은 4 가됩니다.
while문 조건이 만족되지않을때까지 안에 있는 이프문이 계속해서 돌고 그 후 맨밑 2줄의 코드가 시행되는건데 개념적으로 삭제되는 과정이랑 결과 트리가 다릅니다...
제가 코드를 잘못보고 있는거 같은데
뭐가 잘못 되었는지 알려주세요
또한 위 코드대로 변화하는 과정써주실수 있는 분 부탁드립니다...
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |
2691697 | if 문에서 구조체 배열에 저장되있던 문자열 검사하는 법 ? (2) | 민트맛사탕 | 2025-04-16 |
2691678 | C언어 함수 질문이요~!!! | 연보라 | 2025-04-15 |
2691650 | 반복문 | 돋가이 | 2025-04-15 |
2691618 | 링크드리스트 개념 질문이예요 (3) | 맨마루 | 2025-04-15 |
2691592 | 동적할당 이용 배열선언 질문입니다.ㅠㅠ (3) | 허리달 | 2025-04-15 |
2691542 | /=의 용도를 알려주세요 ㅠㅠ! (2) | 아라 | 2025-04-14 |