Я пытаюсь реализовать двоичное дерево поиска в C. Но я застрял в операции удаления, когда я запускаю код, он не удаляет указанное значение.Двоичное дерево поиска не работает, почему?
Перед вызовом удаления: (вызов inorder()
)
16 19 23
После вызова удаления: (вызов inorder()
)
16 19 23
код:
void deleteNode(struct node *n, int data)
{
struct node *temp;
if(n->data==data)
{
if(n->left == NULL && n->right == NULL)
{
n=NULL;
}
else if(n->left == NULL && n->right!=NULL)
{
n->data = (n->right)->data;
n->right = NULL;
}
else if(n->left!=NULL && n->right == NULL)
{
n->data = (n->left)->data;
n->left=NULL;
}
else if(n->left != NULL && n->right != NULL)
{
temp = findMax(root);
n->data = temp->data;
temp = NULL;
}
}
else if(n->data > data)
{
deleteNode(n->left, data);
}
else if(n->data < data)
{
deleteNode(n->right, data);
}
}
У меня есть другой код, который работает , но я хочу знать, что не так с этим кодом?
Редактировать: Я отредактировал код с несколькими изменениями в нем.
Сейчас, когда я пытаюсь удалить ROOT узел. я в конечном итоге с этим: (Симметричного обходе) ->16 23 23
Теперь Почему это происходит, когда temp = NULL
делает максимальный узел NULL.
Примечание: Я не инициализирую temp, поскольку код был изменен и инициализирован непосредственно перед его использованием (temp = findMax(root)
).
код Симметричного():
void inorder(struct node *root)
{
if(root!=NULL)
{
inorder(root->left);
printf("%d\n", root->data);
inorder(root->right);
}
}
В приведенном выше коде вы даже не инициализируете 'temp'. –
'n = NULL;': Это не эффект. 'free (temp);': 'temp' неинициализирован. – BLUEPIXY
Оставьте реализацию в одиночку. Посмотрите на свою подпись функции. Может ли он удалить корневой узел? –