0

B inary S earch T ree(略してBST)を作成していますが、理解できない問題が発生しました。

コードの量を減らすように努めますが、それでもかなりの量が必要になる可能性があります。

ノード:

template <typename Type>
class BSTNode {          // Binary Search Tree nodes
    private:
        int key;        // we search by key, no matter what type of data we have
        Type data;
        BSTNode *left;
        BSTNode *right;

    public:

        BSTNode (int, Type); 
        bool add (int, Type);
        Type search (int);
        BSTNode<Type> *remove (int, BSTNode*);   
        BSTNode<Type> *minNode (int);                                                
};

根:

template <typename Type>
class BST {                    // The binary search tree containing nodes
    private:
        BSTNode<Type> *root;   // Has reference to root node

    public:

        BST ();
        bool add (int, Type);
        Type search (int);
        bool remove (int);

};

誇張したくないので、どれだけのコードを与えるべきかわかりません。もっと必要な場合は、そう言ってください。

私は再帰検索と削除の両方を行います

template<typename Type>
BSTNode<Type> *BSTNode<Type>::remove(int removeKey, BSTNode *parent) {

     // Here I try to remove nodes
     // Depending on the number of children a node has, I remove in different ways
     // The error occurs at removing a node with 2 children
     // here I look for smallest node greater than current node, replace current node, delete node I replaced WITH

    if (this->left != NULL && this->right != NULL){

        int *auxKey = &key;

        this = this->right->minNode(auxKey);  // replace

        return this->right->remove(this->key, this); // remove old node
    }
}

minNodeは次のとおりです。

template<typename Type>
Type *BSTNode<Type>::minNode (int oldKey) {
    if (this->left == NULL) {
        //oldKey = this->key;
        return this->data;
    } else
        return left->minNode();
} 

ここでエラーが発生します。

this = right->minNode(auxKey); 

これにより一連のエラーが発生しますが、主なエラーは次のとおりです。

error: invalid conversion from 'int*' to 'int' [-fpermissive]

見落としていたシンプルなものだと思いますが、なかなか見つからず、かなり前から試してみました。

編集:今のところ、単にoldKeyとauxKeyに渡しkeyminNode()無視することを決定し、minNodeを変更してポインターを返します。

新しいエラー、同じ場所

lvalue required as left operand
4

1 に答える 1

0

minNode 関数は古いキーを表す int 値を受け取りますが、削除関数 (具体的には auxKey) で int* を渡しています。古いキーへのポインタではなく、古いキーの値を渡してみてください。または、正しい値を保持するように in パラメータを更新する場合 (これを実行しようとしているようです)、パラメータを参照パラメータに変更します。

お役に立てれば!

于 2012-06-13T16:49:09.557 に答える