我的链表结构是删除在二叉搜索树用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
删除,但然后立即崩溃LY。问题是什么?
“立即崩溃”意味着什么? Seg故障? –
我正在使用Windows控制台运行程序。它说'程序停止执行',然后提示关闭 – srk