Ошибка сбоя сегментации при вставке узла в дерево двоичного поиска - PullRequest
0 голосов
/ 28 февраля 2020

Меня смущает концепция назначения и выделения указателя узла. Например, когда мне нужно только назначить узел, а не распределение. Пожалуйста, объясните, почему я получаю ошибку СЕГМЕНТАЦИИ в коде ниже -

Node* insert(Node* node, int data)
{
    int x=data;
    Node* nnode=new Node(data);
    //nnode=Node(data);
    Node* curr;
    curr=node;
    while(1){
        if(curr){
            node=nnode;
            break;
        }
        else{
                if(curr->data <x){
                    if(curr->right==NULL){
                        curr->right=nnode;
                        break;
                    }
                    else{
                       curr=curr->right; 
                    }

                }
                else if(curr->data >x){
                    if(curr->left==NULL){
                        curr->left=nnode;
                        break;
                    }
                    else{
                       curr=curr->left; 
                    }
                }
        }

    }
    return node;
    // Your code here
}

1 Ответ

0 голосов
/ 07 марта 2020

Когда вы исправляете первый оператор if следующим образом, ваш код работает нормально!

// if (curr) {
if (curr == NULL) {

Вот код теста и вывод.

int main()
{
    //   10
    //  /  \
    // 8   100
    //     /
    //    50
    Node* root = insert(nullptr, 10);
    root = insert(root, 8);
    root = insert(root, 100);
    root = insert(root, 50);
    std::cout << root->data << std::endl;
    std::cout << root->left->data << std::endl;
    std::cout << root->right->data << std::endl;
    std::cout << root->right->left->data << std::endl;
}
$ ./a.out
10
8
100
50
...