У меня проблема с перебалансировкой функции (узел *) для дерева AVL. Эта функция хорошо работала в большинстве примеров, но в некоторых случаях она не срабатывает, например, когда я пытаюсь получить ключ узла-> влево-> влево, когда узел-> влево == NULL.
TAVLStabla
void AVLStabloMapa<Tkljuca, Tvrijednosti>::rebalansiraj(Node* temp) {
while(temp != 0) {
updateHeight(temp);
if(height(temp->l) >= 2 + height(temp->d)) {
if(height(temp->l->l) >= height(temp->d->d))
rightRot(temp);
else {
rightRot(temp->d);
leftRot(temp);
}
}
else if(height(temp->d) >= 2 + height(temp->l)) {
if(height(temp->d->d) >= height(temp->d->l))
leftRot(temp);
else {
rightRot(temp->d);
leftRot(temp);
}
}
temp = temp->r;
}
}
Задача ещё не решена.
Других решений пока нет …