Trie 字典树

Trie

Trie(字典树)是一种用于实现字符串快速检索的多叉树结构。Tire的每个节点都有若干个字符指针,若再插入和检索字符串时扫描到一个字符,就沿字符走向指向的节点。

 

插入

当需要插入一个字符串时,我们从根走起,依次扫描每一个字符:

  1. 若字符指向一个已经存在的节点,则顺着节点继续走下去
  2. 若字符指向空,则新建一个节点,继续走下去。

当字符串中的字符都检索完毕时,记录下其终点结点。

检索

当需要检索一个字符串是否存在时,我们从根走起,一次扫描每一个字符:

  1. 若字符指向空,则说明不存在,结束。
  2. 若字符指向一个结点,则继续走下去。

 

当字符串中所有字符被检索完毕时,若当前结点是一个被标记为终点的节点,说明字符串存在,否则说明其不存在。

扫描二维码关注公众号,回复: 7034258 查看本文章
 1 int trie[SIZE][26], tot = 1;
 2 void insert(char* str){
 3     int len = strlen(str), p = 1;
 4     for (int k = 0; k < len; k++){
 5         int ch = str[k] - 'a';
 6         if (trie[p][ch] == 0) trie[p][ch] = ++tot;
 7         p = trie[p][ch];
 8     }
 9     end[p] = true;
10 }
11 bool search(char* str){
12     int len = strlen(str), p = 1;
13     for (int k = 0; k <= len; k++){
14         p = trie[p][str[k] - 'a'];
15         if (p == 0) return false;
16     }
17     return end[p];
18 }

猜你喜欢

转载自www.cnblogs.com/hnoi/p/11361040.html