字典树【模板】

字典树:也是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");
}
posted on 2012-08-13 10:08  crying_Dream  阅读(183)  评论(0编辑  收藏  举报