Pagini recente » Cod sursa (job #2619449) | Cod sursa (job #1167661) | Cod sursa (job #2911333) | Cod sursa (job #1343203) | Cod sursa (job #1341612)
#include<iostream>
#include<cstring>
#include<fstream>
#define CH (*s-'a')
using namespace std;
struct Trie
{
int cnt, nrFii;
Trie *fiu[26];
Trie()
{
cnt = nrFii = 0;
memset(fiu, 0, sizeof(fiu));
}
};
Trie *T = new Trie;
void insertNode(Trie *nod, char *s)
{
if (*s == '\0')
{
nod->cnt++;
return;
}
if (nod->fiu[CH] == 0)
{
nod->fiu[CH] = new Trie;
nod->nrFii++;
}
insertNode(nod->fiu[CH], s + 1);
}
int deleteNode(Trie *nod, char *s)
{
if (*s == '\0')
nod->cnt--;
/*daca nodul nu mai are fii*/
else if (deleteNode(nod->fiu[CH], s + 1))
{
nod->fiu[CH] = 0;
nod->nrFii--;
}
if (nod->cnt == 0 && nod->nrFii == 0 && nod != T )
{
delete nod;
return 1;
}
return 0;
}
int queryApparences(Trie *nod, char *s)
{
if (*s == '\0')
return nod->cnt;
if (nod->fiu[CH])
return queryApparences(nod->fiu[CH], s + 1);
return 0;
}
int queryMaxPrefix(Trie *nod, char *s, int k)
{
if (*s == '\0' || !nod->fiu[CH])
return k;
if (nod->fiu[CH])
{
return queryMaxPrefix(nod->fiu[CH], s + 1, k + 1);
}
}
int main()
{
ifstream in("trie.in");
ofstream out("trie.out");
char line[100];
while (in.getline(line,50))
{
if (line[0] == '0')
insertNode(T, line + 2);
else if (line[0] == '1')
deleteNode(T, line + 2);
else if (line[0] == '2')
out<<queryApparences(T, line +2)<<"\n";
else
out<<queryMaxPrefix(T, line + 2, 0)<<"\n";
}
}