[英]Deletion in binary search tree in C
我的链表结构是
typedef struct ll
{
int data;
struct ll *left;
struct ll *right;
}node;
我的删除功能是
void delete(node **parent,node **root,int n)
{
if((*root)==NULL) //if tree is empty then return
{
printf("No tree\n");
return;
}
else
{
if(((*root)->data)==n)
{
free(*root);
return; // if head is the node to be deleted
}
else if(((*root)->data)<n)
{
(*parent)=(*root);
(*root)=(*root)->right;
}
else(((*root)->data)>n);
{
(*parent)=(*root);
(*root)=(*root)->left;
}
while((*root)!=NULL)
{
if(((*root)->data)==n)
{
break;
}
(*parent)=(*root);
if(((*root)->data)>n)
(*root)=(*root)->left;
else
(*root)=(*root)->right;
}
}
if(((*root)->left)==NULL && ((*root)->left)==NULL) //both children are NULL
{
del_a(parent,root);
}
else if(((*root)->left)==NULL && ((*root)->left)!=NULL)// only one child is NULL
{
del_b(parent,root);
}
else if(((*root)->left)!=NULL && ((*root)->left)==NULL)// only one child is NULL
{
del_b(parent,root);
}
else
{
del_c(parent,root); //No child is NULL
}
}
del_a(node **parent,node **root)
{
if((*parent)->left==(*root))
{
free(*root);
(*parent)->left=NULL;
}
else
{
free(*root);
(*parent)->right=NULL;
}
}
del_b(node **parent,node **root)
{
if(((*parent)->left)==(*root))
{
if(((*root)->left)==NULL)
{
(*parent)->left=(*root)->right;
free(*root);
}
else
{
(*parent)->left=(*root)->left;
free(*root);
}
}
else
{
if(((*root)->left)==NULL)
{
(*parent)->right=(*root)->right;
free(*root);
}
else
{
(*parent)->right=(*root)->left;
free(*root);
}
}
}
del_c(node **parent,node **root)
{
node *temp=(*root)->right;
node *prt=(*root);
while((temp->left)!=NULL)
{
prt=temp;
temp=temp->left;
}
(*root)->data=temp->data;
if((temp->right)==NULL)
{
del_a(&prt,&temp);
}
else
{
del_b(&prt,&temp);
}
}
我正在传递参数(其中head
是第一个节点)
delete(NULL,&head,n);
该程序将删除数字n
,但随后立即崩溃。 问题是什么?
当地址为NULL
时,您正在使用parent
。 你也必须得到分段错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.