字典树

来源:互联网 发布:java 图片上传 base64 编辑:程序博客网 时间:2024/05/17 00:58

字典树,Trie树,是一种树形结构,是一种哈希树的变种,典型功能是用于统计,排序和保存大量的字符串。优点是:利用字符串的公共前缀来节约存储空间,最大限度的减少无谓的字符串的比较。

代码模板:

#define maxn 26 //由题目的字符总数决定typedef struct TrieNode{    bool isStr;    struct TrieNode *next[maxn];} Trie;void insertTrie(Trie *root , const char *str){    if(root == NULL || *str =='\0')        return ;    Trie *p = root ;    while(*str != '\0')    {        int id = *str - 'a';        if(p->next[id] == NULL)        {              Trie *temp = (Trie *)malloc(sizeof(Trie));              for(int i=0;i<maxn;i++)              {                  temp->next[i] = NULL;              }              temp->isStr = false;              p->next[id] = temp;              p = p->next[id];        }        else        {            p = p->next[id];        }        str++;    }    p->isStr = true;}int searchTrie(Trie *root , const char *str){    Trie *p = root;    int len = strlen(str);    for(int i=0;i<len;i++)    {        if(p->isStr == false && p->next[*str-'a'] == NULL)            return 0;        if(p->next[*str-'a']->isStr == true)            return 1; //已经存在str的子串        p=p->next[*str-'a'];        str++;    }    return 2;}void dealTrie(Trie *root){    //先对一个结点递归的查找maxn个子树,遍历完成后,释放根树内存    for(int i=0;i<maxn;i++)    {        if(root->next[i] != NULL)        {            dealTrie(root->next[i]);        }    }    free(root);}
0 0
原创粉丝点击