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

Trie树 模板

时间:2014-07-31 16:23:26      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   for   ar   div   size   

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 27

typedef struct node
{
    int v;
    struct node *next[MAX];
}Trie;
Trie *root;

void creatTrie(char *str)
{
    int i, id, j;
    Trie *p = root, *q;
    int len = strlen(str);

    for( i=0; i<len; i++)
    {
        id = str[i] - a;
        if(p->next[id] == NULL){
            q = (Trie *)malloc(sizeof(Trie));
            q->v = 0;
            for( j=0; j<MAX; j++)
                q->next[j] = NULL;
            p->next[id] = q;
        }
        p = p->next[id];
        p->v++;
    }
}

void findTrie(char *str)
{
    int i, id;
    int len = strlen(str);
    Trie *p = root;

    for( i=0; i<len; i++)
    {
        id = str[i] - a;
        p = p->next[id];
        if(p == NULL)
            return ;
        if(p->v > 1)
            printf("%c",str[i]);
        if(p->v == 1){
            printf("%c",str[i]);
            return ;
        }
    }
}

void delTrie(Trie *T)
{
    int i;

    if(T == NULL)
        return ;
    for( i=0; i<MAX; i++)
        if(T->next[i] != NULL)
            delTrie(T->next[i]);
    free(T);
}

int main(void)
{
    char str[1003][23];
    int n = 0, i;

    root = (Trie *)malloc(sizeof(Trie));
    root->v = 0;
    for( i=0; i<MAX; i++)
        root->next[i] = NULL;
    while(scanf("%s",str[n])!=EOF){
        creatTrie(str[n++]);
    }
    for( i=0; i<n; i++)
    {
        printf("%s ",str[i]);
        findTrie(str[i]);
        printf("\n");
    }
    delTrie(root);
    return 0;
}

 

Trie树 模板,布布扣,bubuko.com

Trie树 模板

标签:style   blog   color   io   for   ar   div   size   

原文地址:http://www.cnblogs.com/Yan-C/p/3880836.html

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