Исполняемый сбой при запуске функции - PullRequest
0 голосов
/ 16 марта 2019

Я создаю AVL для назначения, но когда я вызываю функции поворота вправо и поворота влево, исполняемый файл вылетает без сообщения об ошибке.Я думаю, что это может быть из-за исключения указателя NULL, но я не уверен.

Вот мой код для поворотов:

TNODE *rotate_right(TNODE *y){

TNODE *x=y->left;
TNODE *t2=x->right;

x->right=y;
y->left=t2;

y->height =max(height(y->left),height(y->right))+1;
x->height=max(height(x->left),height(x->right))+1;
}

TNODE *rotate_left(TNODE *x){
TNODE *y=x->right;
TNODE *t2=y->left;

y->left=x;
x->right=t2;

y->height =max(height(y->left),height(y->right))+1;
x->height=max(height(x->left),height(x->right))+1;
}

А вот функция вставки, которую я вызываю ихв:

void insert(TNODE **rootp, char *name, float score){
    TNODE *np = (TNODE *) malloc(sizeof(TNODE));
    if (np == NULL) return;
    strcpy(np->data.name, name);
    np->data.score = score;
    np->height = 1;
    np->left = NULL;
    np->right = NULL;

    // 1. Perform the normal BST insertion
    if (*rootp == NULL) {
        *rootp = np;
         return;
    }

    TNODE *root = *rootp;
    if (strcmp(name, root->data.name) < 0 ){
       insert(&root->left, name, score);
    }
    else if (strcmp(name, root->data.name) > 0 ){
       insert(&root->right, name, score);
    }
    else return ;

    // 2. update height of this root node

    // add your code here
    root->height=height(root);

    // STEP 3: get the balance factor of this root node


    // add your code here
    int balance=balance_factor(root);

    // STEP 4: re-balance if not balanced

    // add your code here

   if(balance>1&&balance_factor(root->left)>=0){
       rotate_right(root);
   }
   else if(balance>1&&balance_factor(root->left)<0){
       rotate_left(root->left);
       rotate_right(root);
   }
   else if(balance<-1&&balance_factor(root->right)>=0){
       rotate_left(root);
   }
   else if(balance<-1&&balance_factor(root->right)<0){
       rotate_right(root->right);
       rotate_left(root);
   }

 }

Код работает нормально, если я закомментирую последнюю часть, где мне нужно повернуть его, так что я вполне уверен, что проблема там.Заранее спасибо за любую помощь.

...