0

これは正しく見えますか?つまり、削除機能を実装しようとしています。

Node* BST::findNode(int tofind) {
    Node* node = new Node;    
    node = root;
    while (node != NULL) {
        if (node->val == tofind) {
            return node;
        } else if (tofind < node->val) {
            node = node->left;
        } else {
            node = node->right;
        }
    }
}

これが削除です。完了にはほど遠いですが、

void BST::Delete(int todelete) {

    // bool found = false;

    Node* toDelete = new Node();
    toDelete=findNode(todelete);
    if(toDelete->val!=NULL) {
            cout << toDelete->val << endl;
    }
}

これにより、それを実行するだけでセグメンテーション違反が発生します。アイデアはありますか?

4

2 に答える 2

0

ああ、それは削除で私がやるべきだったからです:

if(toDelete!=NULL) {
  cout << toDelete->val << endl;
}

そうなる前に

if(toDelete->val!=NULL)
于 2012-12-11T10:58:15.577 に答える
0

の主な問題findNode()は、見つけたノードを決して返さないことです。そのため、segfault が発生しています。

また、が返されたdeleteNode()かどうかを確認する必要があります。もちろん、残りの削除ロジックもコーディングする必要があります。findNode()NULL

最後に、2 つのnew Node割り当ては不要であり、メモリ リークを引き起こしています。

于 2012-12-11T11:02:19.290 に答える