Heap.md 삭제 예제 코드 오류
boulce opened this issue · 0 comments
boulce commented
int delete_max_heap() {
if(heapSize == 0) // 배열이 비어있으면 리턴
return 0;
int item = maxHeap[1]; // 루트 노드의 값을 저장
maxHeap[1] = maxHeap[heapSize]; // 마지막 노드 값을 루트로 이동
maxHeap[heapSize--] = 0; // 힙 크기를 하나 줄이고 마지막 노드 0 초기화
for(int i = 1; i*2 <= heapSize;) {
// 마지막 노드가 왼쪽 노드와 오른쪽 노드보다 크면 끝
if(maxHeap[i] > maxHeap[i*2] && maxHeap[i] > maxHeap[i*2+1]) {
break;
}
// 왼쪽 노드가 더 큰 경우, swap
else if (maxHeap[i*2] > maxHeap[i*2+1]) {
swap(i, i*2);
i = i*2;
}
// 오른쪽 노드가 더 큰 경우
else {
swap(i, i*2+1);
i = i*2+1;
}
}
return item;
}
"i2+1" 이 heapSize 범위 안에 있는지에 대한 체크가 없어서 문제가 되는 것 같습니다. for 문에서 i2 <= heapSize만 체크하고 있기 때문에, i2가 heapSize일때, i2+1이 heapSize를 벗어나서 유효하지 않은 배열의 값과 비교할 것 같습니다. 코드 수정이 필요해 보입니다.