4

BST からの要素の削除に問題があります。このコードは、Cormen の本のアルゴリズムに基づいています。要素を削除するには、次の 2 つの関数が必要です。

el *TreeSuccessor(el *x)
{
    el *y;
    if (x->right != NULL){
        return TreeMinimum(x->right);
    }
    y= x->p;

    while (y != NULL && x == y->right){
        x = y;
        y = y->p;
    }
    return y;
}


void TreeDelete (el* &root, el *z, el* &y)
{
    el *x;
    if (z->left == NULL || z->right == NULL){
        y=z;
    }
    else{
        y=TreeSuccessor(z);
    }

    if(y->left != NULL){
        x = y->left;
    }
    else{
        x = y->right;
    }

    if (x!=NULL){
        x->p = y->p;
    }

    if (y->p == NULL){
       root=x;
    }
    else if (y == y->p->left){
       y->p->left = x;
    }
    else{
       y->p->right = x;
    }


    if (y!=z){
       z->indeks = y->indeks;
       strcpy(z->name,y->name);
       strcpy(z->surname,y->surname);
    }
}

そして、ここに の関数を呼び出すコードがありますint main():

    for (int i=0; i<n; i++)
    {
        File>>keyToSearch;
        searchedLeave=TreeSearch(root,keyToSearch);

        TreeDelete(root,searchedLeave,leaveToDelete);
        delete leaveToDelete;
    }

ここに完全なプログラムがありますhttp://pastebin.com/FgvWPzm9

削除中にプログラムがクラッシュします。

4

0 に答える 0