2011-12-26 3 views
0

부모가 자식이 있는지 여부를 확인하기 위해 최대 힙을 확인하려고합니다. 내 힙은 벡터로 구현됩니다. 처음에 함수를 작성했습니다. bool hasChildren (int loc) loc은 힙에있는 부모의 위치입니다. 내 주요 조건이었다 :힙의 부모가 자식이 있거나 없거나

if(heap[2*loc + 1] == NULL && heap[2*loc + 2] == NULL) //if there are children 

문제는 당신이 경계 지수 체크 아웃 할 수 없다는 것입니다 ... 나는 포인터 연산 생각하지만 그건 너무 유효하지 않습니다. 누구든지 힙의 부모가 자식이 있는지 여부를 확인하는 방법에 대한 제안을 갖고 있습니까?

감사합니다.

+0

구현에 벡터 이 있습니까? 이 경우 C 태그를 제거 할 수 있습니다. –

+2

그러나 적어도 하나의 하위 인덱스가 NULL이 아닌 경우 노드에 하위 노드가있는 다른 방법으로 사용하지 않아야합니까? – Vlad

답변

0

문제는 당신이 경계 지수

을 체크 아웃 할 수 없다는 것입니다

std::vector 인 경우 at 멤버 함수를 사용하고 std::out_of_range 예외를 catch 할 수 있습니다.

1

heap의 크기가 malloc 인 것을 알고 계십니까? 그렇다면 2 * loc + 1과 2 * loc + 2가 해당 범위 내에 있는지 확인하십시오. heap 경우 확인 N 요소를 가지고 malloc 에드했다 2 * LOC + 1, 2 * LOC + 2가 N보다 적은 있는지 확인 :

if(((2*loc+1 < N) && (heap[2*loc + 1] == NULL)) && 
    ((2*loc+2 < N) && (heap[2*loc + 2] == NULL))) 
+0

하하하 와우 ... 네, 힙 크기에 액세스 할 수 있습니다. 고마워요. – CodeKingPlusPlus

관련 문제