我有以下代码,如果其中已存在字/密钥,则只检查AVL树。如果是,则返回指向该节点的指针,否则返回null:
void fileInput::testFunction() {
node newWord;
newWord.key = "test";
newWord.wordCount = 1;
tree.AVL_Insert(newWord);
if ((verifyWord("test").wordCount) != NULL) {
//insert increment wordCount code here;
}
}
这是节点struct:
struct node {
string key;
int wordCount;
};
这是verifyWord函数
node fileInput::verifyWord(string a) {
node b;
tree.AVL_Retrieve(a, b);
return b;
}
这是AVL_Retreive函数:
template <class TYPE, class KTYPE>
bool AvlTree<TYPE, KTYPE>
:: AVL_Retrieve (KTYPE key, TYPE& dataOut)
{
NODE<TYPE> *node;
if (!tree)
return false;
node = _retrieve (key, tree);
if (node)
{
dataOut = node->data;
return true;
} // if found
else
return false;
} // AVL_Retrieve
我的问题是如何在testFunction()中的if语句中增加返回对象的wordCount
答案 0 :(得分:1)
您需要更改每个函数中的代码,以便AVL_Retrieve()
返回指向节点的指针(如果找到),如果找不到则返回NULL。然后verifyWord()
将返回相同的指针。然后,您可以使用该指针来修改节点。像这样:
if (node* nn = verifyWord("test")) {
nn->wordCount++;
}
node* fileInput::verifyWord(string a) {
return tree.AVL_Retrieve(a);
}
template <class TYPE, class KTYPE>
TYPE* AvlTree<TYPE, KTYPE>
:: AVL_Retrieve (KTYPE key)
{
if (!tree)
return NULL;
if (NODE<TYPE> *node = _retrieve (key, tree))
return node->data;
else
return NULL;
}