thoon916   2년 전

아무리 반례를 생각하고 대입해봐도 답이 너무 정상적으로 나옵니다 도대체 어디가 틀린지 모르겠습니다. 반례나 틀린부분 좀 찾아주세요

euphoric_n   2년 전

heap에서 원소를 삭제하는 부분에서 잘못된 점이 있습니다.

우선 heap[ROOT] 값을 저장해두고 heap[last]에 있는 값을 heap[ROOT]로 옮긴 뒤 자리를 찾아주는 방식인데요

만약 왼쪽 자녀의 인덱스가 last 보다 크다면 당연히 더이상 교환하지 않고 멈춥니다.

자녀노드가 왼쪽에만 있는 경우에는 왼쪽자녀만 비교를 하면 되고

자녀노드가 양쪽에 있다면 그 중에서 작은 값을 선택합니다.

하지만 heap[smallchild]값이 heap[me]보다 클 수도 있습니다.

이런 경우에는 탐색을 종료해야겠지요.

thoon916   2년 전

그걸 까먹고 있었네요 ㅎㅎ 감사합니다

댓글을 작성하려면 로그인해야 합니다.