AVL树:字典的实际使用

问题描述 投票:0回答:1

我想使用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。我的主意:

  1. 遍历句子;如果单词(key)不存在(search方法返回通知-应该转换为布尔值吗?),则将其(insert方法)添加到树中。

  2. 如果已经存在,请增加第二个参数(在这种情况下为data)---怎么样?如果还没有,则使用data = 1将其添加到树中。

所以,最后一个问题是:我的想法正确吗?如果是这样,那么如何增加模板的第二个参数呢?迭代器是解决方案吗?

c++ dictionary avl-tree
1个回答
0
投票

因此,给定data是您要递增的值,并且它是某种整数类型,您可以简单地执行

© www.soinside.com 2019 - 2024. All rights reserved.