私はバイナリ検索ツリーをコーディングしています。ノードを効果的に削除する方法を見つけるのに少し問題があります。空き(N)を使用してBSTでノードを削除する
私はこのコードを持っている:
struct node* deleteNode(int i, struct node *N)
{
if (N==NULL)
{
return NULL;
}
else if (i<N->value)
{
N->size--;
N->lChild=deleteNode(i,N->lChild);
}
else if (i>N->value)
{
N->size--;
N->rChild=deleteNode(i,N->rChild);
}
else if (N->lChild==NULL)
{
return N->rChild;
}
else if (N->rChild==NULL)
{
return N->lChild;
}
else
{
N->size--;
N->value=findMin(N->rChild);
N->rChild=deleteNode(N->value,N->rChild);
}
return N;
}
およびNは、5つのフィールド有するノード構造である:値、lChild、rChild、サイズ、高さ。私はここでやって実際に は、木は私が削除したいノードに向かって指すようにないようにすることですが、私のような何か入れしようとしているとき:それは、
else if (N->rChild==NULL)
{
free(N);
N=NULL;
return N->lChild;
}
またはすべての同様の探したコードを動作しません。誰かが正しい方向に私を向けることができますか? ありがとうございます。
このようなものにコメントを追加する –
私は残りの部分で編集するつもりでした.... –
ええ、これは悪い例でしたが、N = NULLを入れない場合でもうまくいきました。起動すると、プログラムがクラッシュします。 (だから無料(N)だけで、明らかに彼はNを解放してからN>を使って私を気に入らない)、問題はどこに置くべきかわからないということです。 – Sword22