Удалить узел из дерева двоичного поиска - неправильный ответ - PullRequest
0 голосов
/ 16 ноября 2018

мой код удаления для бинарного дерева поиска вызывает ошибку сегментации, и мне было интересно, в чем проблема.

Предзаказ: 64 8 4 32 16 128 512 256 и шаги выполняются

удаление 4

удаление 64

удаление 128

и это должно привести к предварительному заказу: 256 8 32 16 512

но я получаю предварительный заказ: 256 8 0 32 16 512 9502512

мой код ниже

 bool IntBST::remove(int value){
     Node* n = getNodeFor(value, root);
 if(n == NULL){
     return false;
}

    else{
            if((n->right == NULL) && (n->left == NULL)){
                    if(n->parent->left == n){
                          n->parent->left == NULL;
                  }
                    else{
                            n->parent->right == NULL;
                    }
                    delete n;
                     return true;
             }
             if(n->left && (n->right == NULL)){
                     n->parent->left = n->left;
                     n->left->parent = n->parent;
                     n->left =NULL;
                     delete n;
                    return true;
                             }
            if(n->right && (n->left == NULL)){
                    n->parent->right = n->right;
                     n->right->parent = n->parent;
                     n->right =NULL;
                     delete n;
                    return true;
                    }
             else{
                    Node* n2 = getSuccessorNode(n->info);
                    int temp = n2->info;
                    remove(n2->info);
                    n->info = temp;
                     delete n2;
                    return true;
            }
    }
...