Trie

Posted liulex

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Trie相关的知识,希望对你有一定的参考价值。

传说中的字典树,来学习一下

实现字符串快速检索的多叉树结构

基本操作过程

1.初始化

一个空Trie仅包含一个根节点,该点的字符指针为空

2.插入

当需要插入一个字符串S时,令一个指针P起初指向根节点,然后依次扫描S中的每个字符c

1)若P的c字符指针指向一个已经存在的节点Q,则令P=Q;

2)若P的c字符指针为空,则新建一个节点Q,令P的c字符指针指向Q,然后令P=Q;

当S中的字符扫描完毕,在当前节点P上标记它是一个字符串的末尾//?

3.检索

当需要检索一个字符串S在Trie中是否存在,我们令一个指针P起初指向根节点,然后依次扫描S中的每个字符c:

1)若P的c字符指针指向一个已经存在的节点Q,则令P=Q;

2)若P的c字符指针为空,说明S没有被插入过,结束检索;

当S的字符扫描完毕,若当前节点P被标记为一个字符串末尾,则说明S在Trie中存在。否则,不存在。

下给出插入检索代码:

int trie[SIZE][26],tot=1;//初始化,假设每个字符都是小写字母
void insert(char *str)//插入
          int len =strlen(str),p=1;
          for(int k=0;k<len;k++)
                int ch=str[k]-a;
                if(trie[p][ch]==0)trie[p][ch]=++tot;
                p=trie[p][ch];
         
         end[p]=true;

bool search(char *str)//检索

        int len=strlen(str),p=1;
        for(int k=0;k<len;k++)
            p=trie[p][str[k]-a];
            if(p==0)return false;
        
        return true;

 

 

 

以上是关于Trie的主要内容,如果未能解决你的问题,请参考以下文章

Trie (Prefix Tree)前缀树

208. Implement Trie (Prefix Tree)

208. Implement Trie (Prefix Tree)

208. Implement Trie (Prefix Tree)

208. Implement Trie (Prefix Tree)

[LeetCode]208. 实现 Trie (前缀树)