字符串2&Trie 1/3
我一直以为Trie树是用节点存串的...
好吧是用边存串,节点只是用来维护末尾的
不过好像还可以用这些节点维护额外的信息
然后就是说一下插入:
1.新建一个结点
2.将串中的对对应字符映射到对应的边
3.把现在的节点和新建结点通过映射边连起来
一定要在最后维护结束标记
对应的就是删除:
顺序找,找完删,最后删标记
然后就是查找对应的字符串:
顺着字符串找下去看有没有这样的边
没有就false
到串末如果没结束标记也是false
别的就true了
有一类Trie专门研究01串,就叫01Trie
一般通常解决最大异或和问题
最后,Trie树毕竟是数据结构,可以可持久化,也可以维护别的东西
上一个基本操作的板子
点击查看代码
struct Trie{
struct node{
int t[26];
bool end;
}t[5000];
int sum;
void add(char *s){
int v,len=strlen(s),u=0;
for(int i=0;i<len;i++){
v=s[i]-'a';
if(!t[u].t[v]){
t[u].t[v]=++sum;
}
u=t[u].t[v];
}
t[u].end=1;
}
bool find(char *s){
int u=0,v,len=strlen(s);
for(int i=0;i<len;++i){
v=s[i]-'a';
if(!t[u].t[v]){
return false;
}
u=t[u].t[v];
}
if(t[u].end){
return true;
}
return false;
}
}trie;