Pagini recente » Cod sursa (job #1891498) | Cod sursa (job #1289863) | Cod sursa (job #1289165) | Cod sursa (job #1115638) | Cod sursa (job #2949128)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
int t;
char a[30];
struct Trie
{
int NrFii,Val;
Trie *fiu[27];
Trie()
{
NrFii=Val=0;
for(int y=0; y<
27; y++)
fiu[y]=0;
}
};
Trie *T= new Trie;
void add(Trie *nod, char *a)
{
if(!isalpha(*a))
{
nod->Val++;
return;
}
int copil=*a-'a';
if(!nod->fiu[copil])
{
nod->NrFii++;
nod->fiu[copil]=new Trie;
}
add(nod->fiu[copil],a+1);
}
bool stergere(Trie *nod, char *a)
{
if(!isalpha(*a))
nod->Val--;
else
{
int copil=*a-'a';
if(stergere(nod->fiu[copil],a+1))
{
nod->NrFii--;
nod->fiu[copil]=0;
}
}
if(nod->NrFii==0&& nod->Val==0&& nod!=T)
{
delete nod;
return 1;
}
else
return 0;
}
void prefix(Trie *nod, char *a,int lungime)
{
if(!isalpha(*a)||!(nod->fiu[*a-'a']))
{
g<<lungime<<'\n';
return;
}
else
{
prefix(nod->fiu[*a-'a'],a+1,lungime+1);
}
}
void cautare(Trie *nod, char *a)
{
if(!isalpha(*a))
{
g<<nod->Val<<'\n';
return;
}
int copil=*a-'a';
if(!nod->fiu[copil])
g<<nod->Val<<'\n';
else
cautare(nod->fiu[copil],a+1);
}
int main()
{
while(f>>t>>a)
{
if(t==0)
add(T,a);
else
if(t==2)
cautare(T,a);
else
if(t==1)
stergere(T,a);
else
prefix(T,a,0);
}
return 0;
}