0
我正在對二叉搜索樹進行編碼,並且在找到有效刪除節點的方法時遇到了一些問題。使用免費(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;
}
或者每一項類似尋找代碼,它不起作用。請有人指點我正確的方向嗎? 謝謝。
爲這樣的事情添加評論 – 2011-03-30 16:26:05
我現在要編輯其餘的內容.... – 2011-03-30 16:26:32
是的,這是一個不好的例子,但是即使我不把N = NULL;當啓動時,程序崩潰。 (所以只有免費(N);顯然他不喜歡我在釋放N後使用N->東西),問題是我真的不知道該把它放在哪裏。 – Sword22 2011-03-30 16:28:35