标签:strong 说明 turn 初始化 操作 结束 style insert sea
传说中的字典树,来学习一下
实现字符串快速检索的多叉树结构
基本操作过程
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; }
标签:strong 说明 turn 初始化 操作 结束 style insert sea
原文地址:https://www.cnblogs.com/liulex/p/11230942.html