码迷,mamicode.com
首页 > 其他好文 > 详细

字典树

时间:2016-01-30 02:04:35      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

字典树又叫trie树,利用字符串的公共前缀来降低查询时间的开销,以及字符串的存储开销。所以经常被搜索引擎系统用于文本词频统计。

字典树的数据结构

#define MAX  26
typedef struct Tree
{
    int count;         //用来标记该节点是个可以形成一个单词,如果count!=0,则从根节点到该节点的路径可以形成一个单词
    struct Tree *child[MAX];
}Node,*Trie_node;

字典树的生成

Node* CreateTrie()                             //创建trie节点树
{
    Node *node=(Node*)malloc(sizeof(Node));
    memset(node,0,sizeof(Node));
    return node;
}
void insert(Trie_node root,char *str)      //trie树插入结点
{
    Node *t=root;
    int len=strlen(str);
   for(int i=0;i<len;i++)
    {
     if(t->child[str[i]-a]==NULL)
        {
         Node *tmp=(Node*)malloc(sizeof(Node));
           memset(tmp,0,sizeof(Node));
         t->child[str[i]-a]=tmp;
        }
     t=t->child[str[i]-a];

    }
    t->count++;
}

 

查找该单词是否在字典树中

void search_str(Trie_node root,char *str)             //查找串是否在该trie树中
{
    Node *t=root;
     int len=strlen(str);
   for(int i=0;i<len;i++)
    {
     if(t->child[str[i]-a]!=NULL)
        {
         t=t->child[str[i]-a];

        }
     else
             break;
    }
    if(str[len]==\0)
    {
     if(t->count!=0)
            cout<<"该字符串在该trie树中\n";
    }
    else
        cout<<"该字符串不在trie树中\n";
}

释放空间

void del(Trie_node root)      //释放整个字典树占的堆空间
{
    int i;
    for(i=0;i<MAX;i++)
    {
     if(root->child[i]!=NULL)
            del(root->child[i]);
    }
    free(root);
}

 

字典树

标签:

原文地址:http://www.cnblogs.com/wintersong/p/5170109.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!