首页 > 代码库 > 字典序
字典序
字典树通过链表来建树,可以删除,可以通过前缀来查找字典序里的已存的单词。
当一个单词结束时,标记成不同的颜色。
创建结点
struct trie { int cnt; bool isend; struct trie *next[26]; trie() { cnt=0; isend=false; for(int i=0;i<26;i++) next[i]=NULL; } }
插入新单词
void buildtrie(trie *root,char *s) { trie *p=root; trie *tmp; len=strlen(s); for(int i=0;i<len;i++) { if(p->next[s[i]-‘a‘]==NULL) { tmp=new trie; p->next[s[i]-‘a‘]=tmp; } p=p->next[s[i]-‘a‘]; p-cnt++; } p->isend=true; }
前缀查询
int findtrie(trie *root,char *s) { trie *p=root; int len=strlen(s); for(int i=0;i<len;i++) { if(p->next[s[i]-‘a‘]==NULL) return 0; p=p->next[s[i]-‘a‘]; } return p->cnt; }
释放内存
void del(trie *root) { for(int i=0;i<26;i++) { if(root->next[i]!=NULL) del(root->next[i]); } free(T); }
查询一个单词是否已经存在
nt insert_find(trie *root,char *s) { trie *p=root; while(p!=NULL && *s!=‘\0‘) { p=p->next[*s-‘a‘]; s++; } return (p!=NULL && p->isend==true); }
字典序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。