BST のノード削除機能に問題があります。他のすべての機能が正常に動作することをテストしましたが、ノードを削除した後にツリーを出力すると、セグメンテーション エラーが発生します。
削除するための私のコードは次のとおりです。
struct Tree * findinorder (struct Tree *t)
{
while (t->lchild != NULL)
t=t->lchild;
return t;
}
bool deleteNode (struct Tree *t, int fvalue)
{
bool find = false; //this is to check if node is already found don't go to right sub tree
struct Tree *inorder;
if (t==NULL) return find;
if (t->value == fvalue)
{
if (t->lchild == NULL && t->rchild == NULL )
{
free(t);
}
else {
if (t->lchild ==NULL)
t= t->rchild;
else {
if (t->rchild ==NULL)
t= t->lchild;
else {
inorder = findinorder(t->rchild);
t->value = inorder->value;
free(inorder);
}
}
}
return true;
}
find = deleteNode(t->lchild, fvalue);
if (!find)
find = deleteNode(t->rchild, fvalue);
return find;
}
印刷用のツリー構造と関数は次のとおりです。
struct Tree
{
int value;
struct Tree *lchild;
struct Tree *rchild;
}*root;
void print (struct Tree *t)
{
if (!t) return;
if(t->lchild != NULL)
print(t->lchild);
printf("%d\n",t->value);
if(t->rchild != NULL)
print(t->rchild);
}
私の疑いは、ノードがnullに設定されていないため、印刷に問題が発生し、それが続くことです。
助けてください。