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;}