poj2001(字典树)

来源:互联网 发布:淘宝店铺怎么关闭贷款 编辑:程序博客网 时间:2024/05/17 05:53
#include<cstdio>#include<cstring>#include<iostream>using namespace std;struct node{    int count;    node *next[26];    node()    {        count=0;        memset(next,NULL,sizeof(next));    }};node *root;void InSert(char *str){    node *p=root;    int i=0;    while(str[i])    {        int id=str[i]-'a';        if(p->next[id]==NULL) p->next[id]=new node();        p=p->next[id];        p->count++;  //标记个数        i++;    }}void Find(char *str){    node *p=root;    int i=0,flag=-1;    while(str[i])    {        int id=str[i]-'a';        p=p->next[id];        if(p->count==1) { flag=i; break;} //查找时,如果此节点为1,则次节点以后不会存在>1的情况。        i++;    }    if(flag!=-1)    {        for(i=0;i<=flag;i++)         printf("%c",str[i]);        printf("\n");    }    else     puts(str);}void Del(node *p){    for(int i=0;i<26;i++)      if(p->next[i]!=NULL)        Del(p->next[i]);    delete p;}int main(){    //freopen("Input.txt","r",stdin);    char str[1002][50];    int i=0;    root=new node();    while(scanf("%s",str[i])!=EOF)    {        InSert(str[i]);         i++;    }    for(int j=0;j<i;j++)    {        printf("%s ",str[j]);        Find(str[j]);    }    Del(root);    return 0;}