Pagini recente » Cod sursa (job #219357) | Cod sursa (job #1258902) | Cod sursa (job #895882) | Cod sursa (job #1627598) | Cod sursa (job #2611803)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
const int NMAX = 25;
char c[NMAX];
int operatie;
struct Nod_Trie{
int cnt,nr_fii;
Nod_Trie *fii[26];
Nod_Trie(){
cnt=nr_fii=0;
for(int i=0;i<=26;i++)
fii[i]=NULL;
}
};
Nod_Trie *root = new Nod_Trie;
void Insert(Nod_Trie *nod,char *s)
{
if(*s==0){
nod->cnt++;
return;
}
int letter = *s - 'a';
if(nod->fii[letter]==NULL){
nod->nr_fii++;
nod->fii[letter] = new Nod_Trie;
}
Insert(nod->fii[letter],s+1);
}
bool Delete(Nod_Trie *nod,char *s)
{
if(*s==0){
(nod->cnt)--;
} else {
int letter = *s - 'a';
bool verif = Delete(nod->fii[letter],s+1);
if(verif==true){
nod->fii[letter] = NULL;
nod->nr_fii--;
}
}
if(nod->nr_fii == 0 and nod->cnt == 0 and nod!=root){
delete nod;
return 1;
}
return 0;
}
int Cerinta_2(Nod_Trie *nod,char *s){
if(*s==0) return (nod->cnt);
int letter = *s - 'a';
if(nod->fii[letter]!=NULL) return Cerinta_2(nod->fii[letter],s+1);
return 0;
}
int Cerinta_3(Nod_Trie *nod,char *s,int adancime){
int letter = *s-'a';
if(*s==0 or nod->fii[letter]==0) return adancime;
return Cerinta_3(nod->fii[letter],s+1,adancime+1);
}
int main()
{
while(fin >> operatie >> c){
if(operatie==0) Insert(root,c);
if(operatie==1) Delete(root,c);
if(operatie==2) fout << Cerinta_2(root,c) << '\n';
if(operatie==3) fout << Cerinta_3(root,c,0) << '\n';
}
return 0;
}