hiho7:#1014 : Trie树

一:构造数据结构
1,对于每一个节点,需要存放该节点字母char,该节点的26个孩子节点Trie *next[26],过该节点的字母数int;,
2,数据结构构造如下:
struct Trie
{
 char ch;
 int cnt;
 Trie *next[26];
 Trie() {
  cnt = 0;  //用来记住过该节点的单词个数,过一个单词加一;
  for (int i = 0; i < 26; i++)
  {
   next[i] = NULL;
  }
 }
};

二:插入一个新单词
1,得到单词长度,确定循环次数
2,初始设置头节点为根节点Trie *head = &root;
3,每次遍历分该节点是否有字母,
如果有字母(没有字母),设置当前字母为新的头节点,然后该节点的cnt加一;
如果没有字母,需要新增树,Trie *node = new Trie;
新增树的节点放置该字母;
新增的节点和之前的树枝连起来

三:查询
看该字母位置是否为NULL,是则说明没有字典里没有该单词;
否则依次向下遍历,头结点设为新的字母,head=head->next[idx];
最终前缀数是head->cnt;


猜你喜欢

转载自blog.csdn.net/whatwho_518/article/details/51376948