字典树模板

来源:互联网 发布:usb网络共享打不开 编辑:程序博客网 时间:2024/05/23 19:41
#include<bits/stdc++.h>using namespace std;#define LL long longconst int sigma_size=2;struct TireNode{    int pass;    int last;    TireNode *son[29];    TireNode(){        pass=0;        last=0;        for(int i=0;i<26;i++) son[i]=NULL;        //memset(son,NULL,sizeof(son));    };};TireNode *root=new TireNode();int getnum(char a){    return a-'a'+1;}void Tire_insert(char s[]){    int len=strlen(s);    TireNode *in=root;    for(int i=0;i<len;i++){        int c=getnum(s[i]);        if(in->son[c]==NULL){            TireNode *newnode=new TireNode();            in->son[c]=newnode;        }        in->pass++;        in=in->son[c];    }    in->last++;}int Tire_query(char s[]){    int len=strlen(s);    TireNode *in=root;    for(int i=0;i<len;i++){        int c=getnum(s[i]);        if(in->son[c]==NULL) return 0;        in=in->son[c];    }    return in->pass;    //return in->last;}void Tire_remove(char s[]){    int len=strlen(s);    TireNode *in=root;    for(int i=0;i<len;i++){        int c=getnum(s[i]);        if(in->son[c]!=NULL){            in->pass--;            if(i==len-1) in->last--;            in=in->son[c];        }        else return;//节点不存在,直接返回    }}int main(){    Tire_insert("sssa");    Tire_insert("sssa");    Tire_insert("ssda");    Tire_insert("sdssa");    Tire_insert("ssda");    cout<<Tire_query("ss")<<endl;    Tire_remove("ssda");    cout<<Tire_query("ss")<<endl;    return 0;}
0 0
原创粉丝点击