Pagini recente » Cod sursa (job #916332) | Cod sursa (job #38977) | Cod sursa (job #685815) | Cod sursa (job #1613977) | Cod sursa (job #1086622)
#include<fstream>
#include<iostream>
using namespace std;
struct nod{
int ap,nr;
nod *fii[30];
nod(){
ap =0; nr = 0;
for(int i=0;i<=30;i++)
fii[i]=0;
}
};
nod *trie=new nod;
void adauga_nod(nod *node,char *s){
if(s[0]==0){
node->ap++;return;
}
if(!node->fii[s[0]-'a']){
node->fii[s[0]-'a'] = new nod;
node->nr++;
}
adauga_nod(node->fii[s[0]-'a'],s+1);
}
int sterge_nod(nod *node,char *s) {
if(s[0]==0)
node->ap--;
else
if(sterge_nod(node->fii[s[0]-'a'],s+1)) {
node->nr--;
node->fii[s[0]-'a']=0;
}
if(node!=trie && node->nr==0 && node->ap==0) {
delete node;
return 1;
}
return 0;
}
int aparitii_nod(nod * node,char *s){
if(s[0]==0)return node->ap;
if(node->fii[s[0]-'a']==0)return 0;
aparitii_nod(node->fii[s[0]-'a'],s+1);
}
int cmlpc(nod * node, char *s){
if(s[0]==0 || node->fii[s[0]-'a'] == 0) return 0;
return (cmlpc(node->fii[s[0]-'a'],s+1) + 1);
}
int main(){
ifstream in("trie.in");
ofstream out("trie.out");
int tip;
char w[25];
while(in>>tip>>w){
if(tip==0)
adauga_nod(trie,w);
if(tip==1)
sterge_nod(trie,w);
if(tip==2)
out<<aparitii_nod(trie,w)<<'\n';
if(tip==3)
out<<cmlpc(trie,w)<<'\n';
}
in.close();
out.close();
return 0;
}