Pagini recente » Cod sursa (job #994697) | Cod sursa (job #2348304) | Cod sursa (job #1132342) | Cod sursa (job #2510689) | Cod sursa (job #1941461)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
int n,i,j,x;
char s[25];
struct nod
{
int nrc, nrp;
nod *fii[26];
nod()
{
nrc=nrp=0;
for(int i=0;i<26;i++) fii[i]=NULL;
}
};
nod *root=NULL;
nod *adauga(nod *p, char *s)
{
if(p==NULL)
{
p=new nod;
}
(p->nrp)++;
if(s[0]!='\0')
{
p->fii[s[0]-'a']=adauga(p->fii[s[0]-'a'],s+1);
}
else
{
p->nrc++;
}
return p;
}
int vcuv(nod *p, char *s)
{
if(s[0]=='\0')
{
return p->nrc;
}
else
{
if(p==NULL) return 0;
else vcuv(p->fii[s[0]-'a'],s+1);
}
}
/*
int vpref(nod *p, char *s, int lungime)
{
if(s[0]=='\0')
{
return lungime-1;
}
else
{
if(p==NULL) return lungime-1;
else vpref(p->fii[s[0]-'a'],s+1,lungime+1);
}
} */
nod *sterge(nod *p, char *s)
{
if(s[0]==0) p->nrc--;
else
{
p->fii[s[0]-'a']=sterge(p->fii[s[0]-'a'],s+1);
}
p->nrp--;
if(p->nrp==0)
{
delete p;
p=NULL;
}
return p;
}
int main()
{
while(f>>x)
{
f.get();
f.getline(s,25);
if(x==0) root = adauga(root,s);
else if(x==1) sterge(root,s);
else if(x==2) g<<vcuv(root,s)<<'\n';
//else if(x==3) g<<vpref(root,s,0)<<'\n';
}
return 0;
}