Pagini recente » Cod sursa (job #655321) | Cod sursa (job #2655742) | Cod sursa (job #1661747) | Cod sursa (job #2857889) | Cod sursa (job #1941465)
#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(p==NULL) return 0;
if(s[0]=='\0')
{
return p->nrc;
}
else
{
return 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;
}