我试图在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 = findMax(root)
),所以我没有初始化temp。
码序():
void inorder(struct node *root)
{
if(root!=NULL)
{
inorder(root->left);
printf("%d\n", root->data);
inorder(root->right);
}
}
在上面的代码中,你甚至不会初始化'temp'。 –
'n = NULL;':这不起作用。 '免费(临时);':'临时'是未经过创新的。 – BLUEPIXY
单独执行。看看你的功能签名。它可以删除根节点吗? –