Pagini recente » Cod sursa (job #1943822) | Cod sursa (job #251622) | Cod sursa (job #1827291) | Cod sursa (job #525900) | Cod sursa (job #2075164)
#include <iostream>
#include <fstream>
using namespace std;
struct node
{
int cnt;
int nrfii=0;
node *son[27];
node()
{
for(int i=0;i<27;i++)
son[i]=NULL;
cnt=0;
}
};
node*root=new node();
char cuv[21];
void add(node*crt,int ind)
{
if(cuv[ind]=='\0')
{
crt->cnt++;
return;
}
if(crt->son[cuv[ind]-'a']==NULL)
{
crt->son[cuv[ind]-'a']=new node();
crt->nrfii++;
}
add(crt->son[cuv[ind]-'a'],ind+1);
}
int caut(node*crt,int ind)
{
if(cuv[ind]=='\0')
return crt->cnt;
if(crt->son[cuv[ind]-'a']==NULL)
return 0;
return caut(crt->son[cuv[ind]-'a'],ind+1);
}
int del(node*crt,int ind)
{
if(cuv[ind]=='\0')
crt->cnt--;
else
if(del(crt->son[cuv[ind]-'a'],ind+1))
{
crt->nrfii--;
crt->son[cuv[ind]-'a']=NULL;
}
if(crt->nrfii==0&&crt->cnt==0&&crt!=root)
{
delete crt;
return 1;
}
return 0;
}
int prefix(node*crt,int ind)
{
if(crt==NULL)
return ind-1;
if(cuv[ind]=='\0')
return ind;
return prefix(crt->son[cuv[ind]-'a'],ind+1);
}
int main()
{
ifstream f("trie.in");
ofstream g("trie.out");
int op;
f>>op;
f>>cuv;
while(!f.eof())
{
if(op==0)
add(root,0);
else if (op==1)
del(root,0);
else if (op==2)
g<<caut(root,0)<<endl;
else if (op==3)
g<<prefix(root,0)<<endl;
f>>op;
f>>cuv;
}
return 0;
}