2012-03-30 13 views
2

ポインタを持つバイナリツリーを手動で実装する必要がある割り当てがあります。私の木は、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; 

おかげですべてが私はうまく理解したり、問題を修正するに近く来ない理論に関するいずれかの協議を参照してくださいので。バイナリーツリーから項目を削除するジミー

+0

使用している変数は何ですか? dWeightとiTypeの意味は?あなたはちょうど "バイナリツリー"か、黒と赤やAVLのような特定の実装に参照していますか? –

答えて

1

は、多くのインターネット上の場所(教科書)で覆われています。

これらのリンクを見てみることをお勧めします。コード例もあります。アルゴリズムであることを理解しておくことは非常に重要です。なぜなら、これは課題であり、あなたはそれを知っていることが予想され、将来それについてテストすることができるからです。

Binary search tree. Removing a node

Binary Tree – Deleting a Node

+0

私はアルゴリズムを完全に理解しており、すでにテストを受けて100を作っています。私も何をしようとしているのか分かります。私は正常に完了した右のほとんどの項目に左の枝を従おうとしています。私は子供のために設定したいノードに基づいてアルゴリズムを知っています。私が見ていないのは、私がそれをやり遂げる際に間違っていることです。私は数十のウェブサイトと私が持っているすべての本を通ってきました。説明の問題ではありません。それは私が間違ってポインタを設定していると私はそれが起こっているか分からない。私はこれらのサイトの両方で投稿する前に – Jimmy

関連する問題