2016-11-16 11 views
0
else if (left == NULL) { 
    Node *tempNode = new Node(); 
    tempNode = right; 
    tempNode = right; 
    tempNode->parent = parent; 
    if (t < parent->data) parent->left = tempNode; 
    if (t > parent->data) parent->right = tempNode; 
    delete this; 
    } 

これは、親が子を1つしか持たない場合のバイナリ検索ツリーのfcnを削除するためのコードです。削除しようとしているノードを削除しますが、そのノードの後ろにあるすべてのノードも削除します。助けてください。バイナリ検索ツリーの削除関数が機能しない

+0

申し訳ありません。私はそれに言及するのを忘れていた。私の悪い。はい、C++。それを指摘してくれてありがとう –

+0

't'は何ですか?あなたが私たちに機能全体を示すことができるなら、より良く見えますか? – ydoow

答えて

0

delete thisを実行する前に、独自の左右のポインタをゼロにする必要があります。そうしないと、左右のサブツリーも削除されます(デストラクタを正しく書いたと仮定して)。

可能であれば、ケースt == parent->dataを考慮する必要があります。冗長t > parent->dataテストを削除し、elseを使用してください。

そして、確かにnew Node()を割り当てる必要はありません。次の行の変数を代入しています。このようなコードは書かないでください。

それは次のようになります。

Node *tempnode = right; 
right->parent = this->parent; 
right = nullptr; 
// etc. 
関連する問題