Trie(字典树模板)

来源:互联网 发布:如何面试网络推广专员 编辑:程序博客网 时间:2024/05/18 00:12

(查找是否纯在前缀)
结构体 Trie
成员函数:
void init() 初始化
void insert(char*str) 插入字符串str
int query(int s) 从s开始查找是否纯在一个字符串是另一个字符串的前缀

//N 字符集大小  如果是数字为10,如果是字母为26,大小写为52//AIM 字符集最小字符struct Trie{    struct node    {        bool flog; //标记单词结尾        int next[N];        void init()        {            for(int i=0;i<N;i++)            next[i]=-1;            flog=false;        }    };    node p[100005];    int top;    void init()    {        top=1;        p[0].init();    }    void insert(char *str) //插入字符串     {        int pp=0;        for(int i=0;str[i];i++)        {            if(p[pp].next[str[i]-AIM]==-1)            {                p[pp].next[str[i]-AIM]=top;                p[top].init();                top++;            }            pp=p[pp].next[str[i]-AIM];        }        p[pp].flog=true;    }    int query(int s) //查找     {        if(p[s].flog!=0)        {            for(int i=0;i<N;i++)                if(p[s].next[i]!=-1)                return false;                return true;        }        bool ans=true;        for(int i=0;i<N;i++)        {            if(p[s].next[i]!=-1)            ans=ans&&query(p[s].next[i]);        }        return ans;    }}T;
0 0
原创粉丝点击