родитель в куче есть дети или нет - PullRequest
0 голосов
/ 26 декабря 2011

Я пытаюсь проверить Max-Heap, чтобы увидеть, есть ли у родителей дети или нет.Моя куча реализована как вектор.Сначала я написал функцию bool hasChildren (int loc) loc - это местоположение родителя в куче.мое основное условие было:

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

Проблема в том, что вы не можете проверять индексы границ ... Я думал об арифметике указателей, но это также неверно.У кого-нибудь есть предложения, как проверить, есть ли у родителей в куче дети?

спасибо!

Ответы [ 2 ]

1 голос
/ 26 декабря 2011

Знаете ли вы, какой heap был malloc ред? Если это так, просто убедитесь, что 2 * loc + 1 и 2 * loc + 2 находятся в этом диапазоне. Если heap было malloc ed для N элементов, убедитесь, что 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 голосов
/ 26 декабря 2011

Проблема в том, что вы не можете проверить индексы границ

Если это std::vector, вы можете использовать его at функцию-член и перехватить исключение std::out_of_range.

...