我正在做一个 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]
我猜这很简单,我忽略了,但我找不到它,已经尝试了很长时间。
编辑:现在决定简单地将key
传递给minNode()
并忽略oldKey和auxKey,修改minNode以返回指针。
新错误,同一个地方
lvalue required as left operand
答案 0 :(得分:0)
你的minNode函数接受一个表示旧键的int值,但你在remove函数中传递一个int *(特别是auxKey)。尝试传入旧密钥的值,而不是指向它的指针。或者,如果要更新in参数以保存正确的值(您似乎尝试执行此操作),请将参数更改为引用参数。
希望这有帮助!