我正在编写一个项目,用于索引多个PDF文件的单词,并将该单词与文件位置一起存储到作为AVL树的索引中。我有一个问题,在解析PDF并将单词添加到AVL树索引之后,索引会删除/覆盖/做某些事情,当索引完成时,只有来自一个pdf的数据留在树中。
这是AVL Tree类的insert方法。
template<class T>
void avlTree<T>::insert(T data, avlNode<T>*& node){
//if we are at a nullptr, then insert the new node
if(node==nullptr){
node = new avlNode<T>(data);
}
//if the data to insert is less than the node we are lookingg at
//then next compare it to the left node
else if(data < node->key){
insert(data, node->left);
//if left subtree is larger than right, then a
//case 1 or 2 is present
if(height(node->left)-height(node->right)==2){
//if data was inserted to the left
//LL or Case 1
if(data<node->left->key){
leftRotate(node);
}
//LR or case 2
else{
doubleLeftRotate(node);
}
}
}
//if greater then compare it to the right node
else if(data>node->key){
insert(data, node->right);
//if right subtree is larger than the left, then
//a case 3 or 4 is present
if(height(node->right)-height(node->left)==2){
//if data was inserted to the left
//LL or Case 1
if(data>node->right->key){
//RR or case 4
rightRotate(node);
}
//RL or case 3
else{
doubleRightRotate(node);
}
}
}
//if nodes are equal case
else{
//do nothing
}
//update the height of the node
node->height = 1 + max(height(node->left),height(node->right));
}
这是AVL Index类中的函数调用,它包含一个AVL树(索引)作为数据成员
void avlIndex::addWord(indexEntry iE){
index.insert(iE);
}
AVL树节点包含IndexEntry对象。这是构造函数。 entry是被索引的单词,entryLocation是出现单词的fileNames的向量,locCount是一个带有每个文件出现次数的向量。
//argument constructor
indexEntry::indexEntry(string what, string where){
entry = what;
entryLocation.push_back(where);
locCount.push_back(1);
}
最后,这里是调用索引条目添加到索引的位置,其中add是单词并且是一个字符串
indexEntry entry(add,fileName);
//check if word is already indexed
if(!(index->isIn(entry))){
//if it is not in, add a new entry
index->addWord(entry);
}
该程序按预期工作,大约1.5-2.5 PDF,具体取决于它们的大小,然后整个树只包含来自一个pdf的信息。只是想知道是什么原因造成的?