AVL树数据被覆盖

时间:2017-05-04 23:25:04

标签: c++ pdf data-structures tree avl-tree

我正在编写一个项目,用于索引多个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的信息。只是想知道是什么原因造成的?

0 个答案:

没有答案