我的鏈表結構是刪除在二叉搜索樹用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