нерекурсивный метод вставки двоичного дерева () не работает

Я написал двоичный код дерева для вставки в него элементов нерекурсивным методом. Код не работает, как задумано. Независимо от того, сколько раз я отлаживал код, кажется, что все в порядке, но я получаю неправильные результаты. Я надеюсь, что вы, ребята, можете помочь. Заранее спасибо.

void insert(int element){
if(root == NULL){
struct elemq *node;
node = (struct elemq *)malloc(sizeof(struct elemq));
node->ele = element;
node->left = NULL;
node->right = NULL;
root = node;
cout << root->ele << "\n";
}
else{
struct elemq *ref;
ref = root;
while(ref != NULL){
if(element <= ref->ele){
if(ref->left == NULL){
struct elemq *node;
node = (struct elemq *)malloc(sizeof(struct elemq ));
node->ele = element;
node->left = NULL;
node->right = NULL;
ref->left = node;
break;
}
else{
ref = ref->left;
}
}
else if(element > ref->ele){
if(ref->right == NULL){
struct elemq *node;
node = (struct elemq *)malloc(sizeof(struct elemq ));
node->ele = element;
node->left = NULL;
node->right = NULL;
ref->right = node;
break;
}
else{
ref = ref->right;
}
}
}
}
}

Каждый раз, когда я пытаюсь вставить элемент, каждый элемент рассматривается как rootне только с первого раза. Итак, каждый раз, условие if(root == NULL) является true, Я объявил root в качестве глобальной переменной и инициализировал ее NULL в main(), Я узнал это, положив cout << во-первых if() состояние. Я изменил свой предыдущий пост на этот новый вопрос.

1

Решение

node = ref->left;

Ты хочешь

ref->left = node;

и аналогичные для ref-> right

2

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

Я думаю, что вы по ошибке устанавливаете узел, который вы добавляете к ссылкам, вместо того, чтобы устанавливать левую и правую ссылки на добавляемый вами узел.
+ Изменить node = ref->left в ref->left = nodeи аналогично за право.

1

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