我想使用AVL树结构作为字典下的基础。我的课:
template <typename keyType, typename dataType>
class AVLTree
{
class Node
{
public:
keyType key;
dataType data;
short int balanceFactor;
Node * left;
Node * right;
Node(const keyType & newKey, const dataType & newData) : key(newKey), data(newData), balanceFactor(0), left(NULL), right(NULL) {};
};
Node * Root;
***methods
void insert(AVLTree<keyType, dataType>::Node* & subtreeRoot, const keyType & newKey, const dataType & newData); //insert new element
void clear(AVLTree<keyType, dataType>::Node* & subtreeRoot); //clear whole tree
void graph(AVLTree<keyType, dataType>::Node* const & subtreeRoot, int indent) const; //print tree
void printDes(AVLTree<keyType, dataType>::Node* const & subtreeRoot) const; //print in descending order
void printAsc(AVLTree<keyType, dataType>::Node* const & subtreeRoot) const; //print in ascending order
...
public:
void search(const keyType & findKey) const;
...};
假设我有一个句子:
我喜欢绿草和绿树。
当我摆脱标点符号('。')并降低所有得到的单词时:
我喜欢绿草和绿树
我想将每个单词放入AVL树的结构中,并将其打印为升序列表:
和-1
草-1
绿色-2
i -1
like- 1
trees-1
第二个“参数”是出现的次数,即在绿色的情况下是2。
我已经将它作为单链表的映射了,但是现在我想实现AVL树,我想知道下一步应该做什么。我计划使用几种方法(包括此方法)制作外部类COUNTER。我的主意:
遍历句子;如果单词(key)不存在(search方法返回通知-应该转换为布尔值吗?),则将其(insert方法)添加到树中。
如果已经存在,请增加第二个参数(在这种情况下为data)---怎么样?如果还没有,则使用data = 1将其添加到树中。
所以,最后一个问题是:我的想法正确吗?如果是这样,那么如何增加模板的第二个参数呢?迭代器是解决方案吗?
因此,给定data
是您要递增的值,并且它是某种整数类型,您可以简单地执行