字典树(数组实现)

数组的版本并不怎么直观,因为在数组中实现的树没有“层”的概念。代替的是节点的“编号”,通过这个编号可以向“下一层”去找节点,也可以通过编号获得字符串的一些其他信息。

int tree[1000007][26]; //存下一个点的位置
int sz;//节点个数
ll value[1000007];//节点的值
int n,m;
void init(){
    sz=0;
    memset(tree,0,sizeof(tree));
    memset(value,0,sizeof(value));
}
void insert(string s){
    int len=s.length();
    int u=0;
    for(int i=0;i){
        int temp=s[i]-'a';
        if(!tree[u][temp])
            tree[u][temp]=++sz;
        u=tree[u][temp];
        value[u]++;
    }
}
ll query(string s){
    int len=s.length();
    int u=0;
    for(int i=0;i){
        int temp=s[i]-'a';
        if(!tree[u][temp])
            return 0;
        u=tree[u][temp];
    }
    return value[u];
}

 

转载于:https://www.cnblogs.com/wmj6/p/10466885.html

你可能感兴趣的:(字典树(数组实现))