AVL балансировка найти, когда балансировать - PullRequest
1 голос
/ 27 марта 2020

Я пытаюсь создать дерево 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;
  }
}
...