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に渡しkey
てminNode()
無視することを決定し、minNodeを変更してポインターを返します。
新しいエラー、同じ場所
lvalue required as left operand