Я пытаюсь создать дерево AVL, и у меня возникают проблемы с моей функцией поиска дисбаланса дерева. Я получаю ошибку сегментации в этой функции.
void AVL::findInbalance(Node* start) {
cout << "findInbalance " << start->data << endl;
int diff;
if(start->rightChild == nullptr && start->leftChild == nullptr) {
diff = 0;
}
else {
diff = start->rightChild->getHeight() - start->leftChild->getHeight();
}
if(diff > 1 && start->rightChild->rightChild->getHeight() >= start->rightChild->leftChild->getHeight()){
cout << "left rotation" << endl;
rotation(start, 0);
}
if(diff < -1 && start->leftChild->leftChild->getHeight() >= start->leftChild->rightChild->getHeight()){
cout << "right rotation" << endl;
rotation(start, 1);
}
if(diff < -1 && start->leftChild->leftChild->getHeight() < start->leftChild->rightChild->getHeight()) {
cout << "left right rotation" << endl;
rotation(start->leftChild, 0);
rotation(start, 1);
}
if(diff > 1 && start->rightChild->rightChild->getHeight() < start->rightChild->leftChild->getHeight()) {
cout << "right left rotation" << endl;
rotation(start->rightChild, 1);
rotation(start, 0);
}
if(start->parent != nullptr){
findInbalance(start->parent);
}
else {
cout << "balance complete" << endl;
return;
}
}