数据结构——trie树(字典树)

又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。

模板题:

数据结构——trie树(字典树)_第1张图片

 

 代码

#include
using namespace std;

const int N = 200010;
//用来存放子节点,idx是已经使用的结点下标
int son[N][26],idx;
//用于标记是否有单词
int cnt[N];

void insert(char str[]){
    //p == 0即是根节点,也是空节点
    int p = 0;
    for(int i = 0;str[i];i++){
        int t = str[i] - 'a';
        //判断是否有当前字符的子节点
        if(!son[p][t]) son[p][t] = ++ idx;
        
        p = son[p][t];
    }
    //标记字符串末尾
    cnt[p]++;
}

int query(char str[]){
    int p = 0;
    for(int i = 0;str[i]; i ++){
        int t = str[i] - 'a';
        if(!son[p][t]) return 0;
        p = son[p][t];
    }
    if(cnt[p]) return cnt[p];
}

int main(){
    int n;
    cin>>n;
    char ch;
    char str[N];
    for(int i = 0 ; i < n ;i ++){
        cin>>ch>>str;
        if(ch == 'I'){
            insert(str);
        }
        if(ch == 'Q'){
            cout<endl;
        }
    }
    
    
    
    return 0;
}

 

你可能感兴趣的:(数据结构——trie树(字典树))