字典树【模板】
字典树:也是trie树,根节点不包含字符,除了根节点外每个节点包含一个字符,而且都不一样。从根结点单到某结点的连线就是所对应的字符串。可以查找,插入和删除。
实现过程:从根节点开始,查找第一个单词,找到后再找相应的子树进行循环这个过程...
模板如下:
struct node { int cnt; //记录该字符出现次数 node *next[27]; }*root; //root根节点 void Maketree(char *str) /*插入*/ { int ans, i, len; node *p, *q; p=root; len=strlen(str); for(i=0; i<len; i++) { ans=str[i]-'a'; if(p->next[ans]!=NULL) { p=p->next[ans]; //p指向父母结点 p->cnt++; } else { q=(node *)calloc(1, sizeof(node)); //创建新节点 p->next[ans]=q; //q给该节点 p=q; //p指向该节点 p->cnt=1; } } } void Findtree(char *str) /*查找*/ { int i, len, ans; node *p; p=root; len=strlen(str); for(i=0; i<len; i++) { ans=str[i]-'a'; p=p->next[ans]; printf("%c", str[i]); if(p->cnt==1) break; } printf("\n"); }