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的主要内容,如果未能解决你的问题,请参考以下文章
208. Implement Trie (Prefix Tree)
208. Implement Trie (Prefix Tree)
208. Implement Trie (Prefix Tree)