0

二分探索木があり、単一の子を持つノードを削除しようとすると、そのノードを削除し、子ノードをその場所に移動します。私はそのコードを持っていますが、それを行うたびに悪いポインタを与えています。

これはコードの一部です

else if((root->Left != NULL) != (root->Right != NULL)){ //Checks if it's a on child node
    if(root->Left != NULL){ //If it has a left child, attempts to move the left child to existing node
        delete root;
        root = root->Left;
    }
    else{ //If it is right child, attempts to move right child to existing node
        delete root;
        root = root->Right;
    }
}

構造体には値があります

DATA_TYPE Value;
TreeNode* Left;
TreeNode* Right;

デバッガーから間違って割り当てていることはわかっていますが、ノードを移動する正しい方法は何ですか?

4

2 に答える 2

1

編集:

どうして見逃したのかわかりませんがroot、削除した直後に使用しています。

Edit2:一時的なものが必要です。

TreeNode* temp = root->Right;
delete root;
root = temp;
于 2012-11-02T02:18:18.677 に答える