Вставка в двоичное дерево поиска

Я написал функцию для вставки узлов в двоичное дерево поиска. Однако при попытке построить решение в Visual Studio 2013 я получаю следующее: «Необработанное исключение в 0x00FD4CD0 в BST.exe: 0xC0000005: расположение чтения нарушения доступа 0xCCCCCCCC». Ниже мой код.

void BST::insert(int value) {
Node* temp = new Node();
temp->data = value;
if(root == NULL) {
root = temp;
return;
}
Node* current;
current = root;
Node* parent;
parent = root;
current = (temp->data < current->data) ? (current->leftChild) : (current->rightChild);
while(current != NULL) {
parent = current;
current = (temp->data < current->data) ? (current->leftChild) : (current->rightChild);
}
if(temp->data < parent->data) {
parent->leftChild = temp;
}
if(temp->data > parent->data) {
parent->rightChild = temp;
}
}

Тогда в моей основной функции у меня есть:

int main() {
BST bst;
bst.insert(10);
system("pause");
}

Когда я удаляю bst.insert (10); в моей основной функции я больше не получаю необработанное исключение.

Ниже приведена инициализация моей структуры

struct Node {
int data;
Node* leftChild;
Node* rightChild;
Node() : leftChild(NULL), rightChild(NULL) {}
};
struct BST {
Node* root;
void insert(int value);
BST() : root(NULL) {}
};

1

Решение

В вашей функции вставки вы не устанавливаете leftChild а также rightChild в NULL.

void BST::insert(int value) {
Node* temp = new Node();
temp->data = value;
temp->leftChild = NULL;
temp->rightChild = NULL;
if(root == NULL) {
root = temp;
return;
}

Кроме того, я не могу быть уверен (так как вы не разместили конструктор для BST) но вы, возможно, не установили root в NULL в BST конструктор. Попробуйте с этими модификациями.

Похоже, у вас нет конструктора в BST из того, что вы опубликовали:

struct BST {
Node* root;
void insert(int value);
BST(): root(NULL) { } // add a constructor to initialize root to NULL
};
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]