字典树模板

struct Trie
{
    struct TrieNode
    {
        int f;
        TrieNode* child[26];
        TrieNode()
        {
            memset(child,NULL,sizeof child);
            f=0;
        }
    }*root;

    Trie()
    {
        root=new TrieNode();
    }

    void Insert(char str[])
    {
        TrieNode* p=root;
        for(int i=0,k;str[i];i++,p=p->child[k])
        {
            k=str[i]-'a';
            if(!p->child[k])
                p->child[k]=new TrieNode();
        }
        p->f=1;
    }

    int Search(char str[])
    {
        TrieNode* p=root;
        for(int i=0,k;str[i];i++)
        {
            k=str[i]-'a';
            if(p->child[k])
                p=p->child[k];
            else
                return 0;
        }
        return p->f;
    }
    
    void Free(TrieNode* Root)
    {
        TrieNode* p=Root;
        for(int i=0;i<26;i++)
            if(p->child[i])
                Free(p->child[i]);
        free(p);
    }
    
    ~Trie()
    {
        Free(root);
    }

};

你可能感兴趣的:(字典树模板)