gyoogle/tech-interview-for-developer

Heap.md 삭제 예제 코드 오류

boulce opened this issue · 0 comments

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를 벗어나서 유효하지 않은 배열의 값과 비교할 것 같습니다. 코드 수정이 필요해 보입니다.