Pagini recente » Cod sursa (job #1874547) | Cod sursa (job #1722302) | Cod sursa (job #460713) | Cod sursa (job #518069) | Cod sursa (job #2085299)
#include<fstream>
using namespace std;
ifstream in ("trie.in");
ofstream out ("trie.out");
char s[30];
int n,x;
struct trie {
int fii, numar;
trie *v[26];
trie () {
fii = 0;
numar = 0;
for (int i = 0; i <= 25; i ++) {
v[i] = 0;
}
}
};
trie *radacina = new trie;
void adauga (trie *&nod , int i) {
if (s[i] == 0) {
nod -> numar ++;
return;
}
if (nod -> v[s[i]-'a'] == NULL) {
nod -> v[s[i]-'a'] = new trie;
nod -> fii ++;
}
adauga (nod -> v[s[i]-'a'], i + 1);
return;
}
bool sterge (trie *&nod, int i) {
if (s[i] == 0) {
nod -> numar --;
if (nod -> numar == 0 && nod -> fii == 0 && nod != radacina) {
delete nod;
nod = 0;
return 1;
}
}
else{
if (sterge(nod -> v[s[i]-'a'] , i + 1)) {
nod -> fii --;
if (nod -> fii == 0 && nod -> numar == 0 && nod != radacina) {
delete nod;
nod = 0;
return 1;
}
}
}
return 0;
}
int lungime (trie *nod, int i) {
if (nod -> v[s[i]-'a'] == NULL) {
return 0;
}
if (s[i] == 0) {
return 0;
}
return 1 + lungime (nod->v[s[i]-'a'], i+1);
}
int numara (trie *nod, int i) {
if (nod == NULL) {
return 0;
}
if (s[i] == 0) {
return nod -> numar;
}
else{
return numara (nod -> v[s[i]-'a'] , i + 1);
}
}
int main (void) {
while (in >> x) {
in >> s;
if (x == 0) {
adauga (radacina, 0);
}
if (x == 1) {
sterge (radacina, 0);
}
if (x == 2) {
out << numara (radacina,0) <<"\n";
}
if (x == 3) {
out << lungime (radacina,0)<<"\n";
}
}
return 0;
}