Я пытаюсь удалить узел из дерева двоичного поиска. Но когда я хочу проверить функцию, я получу сообщение об ошибке в «case 3: two children».Удалить узел из двоичного дерева поиска в C
clist->name = temp->name;
Эта строка вызывает сообщение об ошибке. В нем говорится: левый операнд должен быть l-значением. Я новичок в C и деревьях двоичного поиска. Я не могу понять, почему эта строка не работает. Я нашел много идей в Интернете, как реализовать функцию удаления. И все эти подходы используют эту строку кода.
Ниже приведена полная функция.
(GreaterThan, LessThan, toLowerCase являются вспомогательной функцией, что я реализовывал. И они работают отлично точно)
struct student {
int ID;
char name[20];
struct student *left;
struct student *right;
};
struct student * minValueNode(struct student* node) {
struct student* current = node;
while (current->left != NULL)
current = current->left;
return current;
}
struct student * bst_delete (struct student *clist, char* token, struct student **parent)
{
if (clist == NULL)
return clist;
char* clistName = clist->name;
char* tok = token;
toLowerCase(clistName);
toLowerCase(tok);
if (lessThan(tok, clistName))
clist->left = bst_delete(clist->left, token, &clist->left);
else if (greaterThan(tok, clistName))
clist->right = bst_delete(clist->right, token, &clist->right);
else
{
//Case 1: No children
if (clist->left == NULL && clist->right == NULL) {
free(clist);
clist = NULL;
}
//Case 2: One Child
if (clist->left == NULL) {
struct student *temp = clist;
clist = clist->right;
free(temp);
} else if (clist->right == NULL) {
struct student *temp = clist;
clist = clist->left;
free(temp);
}
//Case 3: Two Children
else {
struct student *temp = minValueNode(clist->right);
clist->name = temp->name;
clist->right = bst_delete(clist->right, temp->right, &clist->right);
}
}
return clist;
}
Было бы замечательно, если бы кто-нибудь может сказать мне, почему эта линия не работает. И как я могу исправить эту ошибку.
Спасибо!