я пытаюсь реализовать свое собственное двоичное дерево поиска, я застрял на вставке данных, можете ли вы объяснить мне, что я делаю неправильно.
void tree::add(int data) {
tree * tmp = new tree;
if (root == NULL) {
root = tmp;
root->data = data;
root->left = NULL;
root->right = NULL;
}
else if (data <= root->data) {
left = tmp;
left->data = data;
left->left = NULL;
left->right = NULL;
while (tmp != NULL) {
if (data <= left->data) {
tmp = left->left;
} else {
tmp = left->right;
}
}
}
Я пытаюсь заполнить левый узел, если данные меньше, чем корень, но если данные больше, чем этот лист, но все же меньше, чем корень, он должен быть правым дочерним элементом, но на самом деле у меня есть выбор доступа
«Можете ли вы объяснить мне, что я делаю неправильно», я бы сказал, что не работаю с ручкой и бумагой. Нарисуй чумовые рисунки!
Вы должны пересмотреть логику вашего алгоритма:
//here you set the pointers to null
left->left = NULL;
left->right = NULL;
while (tmp != NULL) {
if (data <= left->data) {
// here at the first time
tmp = left->left;
} else {
// or here
tmp = left->right;
}
// tmp will be set to null and the exection will end immediately
}
А что вам показывает ваш отладчик? Он должен привести вас к строке, где происходит ошибка, и позволить вам проверить все переменные.