Pagini recente » Cod sursa (job #471958) | Cod sursa (job #2324775) | Cod sursa (job #633203) | Cod sursa (job #43597) | Cod sursa (job #516474)
Cod sursa(job #516474)
#include <stdio.h>
#include <string.h>
#define CH (*w-'a')
char w[25];
int sw;
struct tree
{
int nod,cnt;
tree* link[26];
tree()
{
cnt=nod=0;
memset(link,NULL,sizeof(link));
}
}*Trie;
void add(tree *trie,char *w)
{
if(*w=='\0')
{
trie->nod++;
return;
}
else
{
if(trie->link[CH]==NULL)
{
trie->link[CH]=new tree;
trie->cnt++;
}
add(trie->link[CH],w+1);
}
}
int del(tree *trie,char *w)
{
if(*w=='\0') trie->nod--;
else
if(del(trie->link[CH],w+1))
{
trie->link[CH]=NULL;
trie->cnt--;
}
if(trie->nod==0&&trie->cnt==0&&trie!=Trie)
{
delete trie;
return 1;
}
return 0;
}
int frq(tree *trie,char *w)
{
if(*w=='\0')
{
return trie->nod;
}
else
if(trie->link[CH]!=NULL) return frq(trie->link[CH],w+1);
else return 0;
}
int pre(tree *trie,char *w,int level)
{
if(*w=='\0'||trie->link[CH]==NULL) return level;
else return pre(trie->link[CH],w+1,level+1);
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
Trie=new tree;
fgets(w,25,stdin);
sw=w[0]-'0';
strcpy(w,w+2);
w[strlen(w)-1]='\0';
while(!feof(stdin))
{
if(sw==0) add(Trie,w);
else
if(sw==1) del(Trie,w);
else
if(sw==2) printf("%d\n",frq(Trie,w));
else
if(sw==3) printf("%d\n",pre(Trie,w,0));
fgets(w,25,stdin);
sw=w[0]-'0';
strcpy(w,w+2);
w[strlen(w)-1]='\0';
}
return 0;
}