Pagini recente » Cod sursa (job #3198582) | Cod sursa (job #2986662) | Cod sursa (job #511606) | rar38 | Cod sursa (job #418309)
Cod sursa(job #418309)
#include<fstream.h>
int ch,niv;
char *p;
struct trie
{
int cnt,nrfii;
trie *fiu[26];
trie ()
{
cnt=nrfii=0;
memset(fiu,0,sizeof(fiu));
}
} ;
trie *t=new trie;
void querry2 (trie *nod)
{
ch=*p-'a';
if (*p==0 || nod->fiu[ch]==0)
return ;
else
{
p++;
niv++;
querry2(nod->fiu[ch]);
}
}
int querry1(trie *nod)
{
if (*p==0)
return nod->cnt;
else
{
ch=*p-'a';
p++;
if (nod->fiu[ch])
return (querry1(nod->fiu[ch]));
return 0;
}
}
int sterg (trie *nod)
{
if (*p==0)
nod->cnt--;
else
{
ch=*p-'a';
p++;
if (sterg(nod->fiu[ch]))
{
p--;
ch=*p-'a';
nod->nrfii--;
nod->fiu[ch]=0;
}
if (nod->cnt==0 && nod->nrfii==0 && nod!=t)
{
delete nod;
return 1;
}
return 0;
}
}
void insert (trie * nod )
{
if (*p==0)
{
nod->cnt++;
return ;
}
ch=*p-'a';
if (nod->fiu[ch]==0)
{
nod->fiu[ch]=new trie;
nod->nrfii++;
}
*p++;
insert (nod->fiu[ch]);
}
int main()
{
char s[30];
int op,k;
int ch;
ofstream g("trie.out");
ifstream f("trie.in");
while (f>>op)
{
f>>s;
p=s;
if (op==0) insert(t);
else if (op==1) sterg(t);
else if (op==2)
{
k=querry1(t);
g<<k<<'\n';
}
else
{
niv=0;
querry2(t);
g<<niv<<'\n';
}
}
f.close();
return 0;
}