ポインタを持つバイナリツリーを手動で実装する必要がある割り当てがあります。私の木は、2人の子供たちと一緒に削除するまで、素晴らしい作品です。私がその時点で終わるのは、正しいアイテムが削除され、正しいアイテムが削除されたアイテムの代わりに置かれますが、私は左の子が自分自身への不正なポインタで終わってしまっています。これを台無しにしている。これは割り当てなので、私はすべてのコードを投稿したくありませんが、ここには問題があるコードがあります。誰かが私のためのコードを実行するだけでなく、私が間違いを犯しているところを教えてください。本当に感謝します。また、私がテストしているツリーは、おおよそこのように見え、ノード3を削除しようとしています。ノード2は正しい位置にありますが、ノード2はノード2になります。この場合、交換ノードが直接の子供でない場合、私は間違っていると思っていません。任意の助けバイナリツリー上で2つの子の削除
5
/ \
3 7
/\ /\
2 4 6 8
/
3.5
temp = delItem->left;
back = delItem;
while(temp->right != NULL)
{
back = temp;
temp = temp->right;
}
returnItem->m_dValue = delItem->m_dValue;
returnItem->m_dWeight = delItem->m_dWeight;
returnItem->m_iType = returnItem->m_iType;
strcpy(returnItem->m_sDesc,delItem->m_sDesc);
strcpy(returnItem->m_sItemName,delItem->m_sItemName);
returnItem->left = delItem->left;
returnItem->right = delItem->right;
delItem = temp;
delItem->left = returnItem->left;
delItem->right = returnItem->right;
returnItem->left = NULL;
returnItem->right = NULL;
/*delItem->left = left;
delItem->right = right;*/
if(back == delItem)
{
back->left = temp->left;
}
else
{
back->right = temp->left;
}
temp->left = NULL;
temp->right = NULL;
delete temp;
return returnItem;
おかげですべてが私はうまく理解したり、問題を修正するに近く来ない理論に関するいずれかの協議を参照してくださいので。バイナリーツリーから項目を削除するジミー
使用している変数は何ですか? dWeightとiTypeの意味は?あなたはちょうど "バイナリツリー"か、黒と赤やAVLのような特定の実装に参照していますか? –