Cod sursa(job #418319)

Utilizator Andreid91Ciocan Andrei Andreid91 Data 15 martie 2010 19:11:56
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include<fstream.h>




int ch,niv;

char *p;

struct trie
{
	int cnt,nrfii;
	trie *fiu[26];
	
	trie ()
	{
		cnt=nrfii=0;
		memset(fiu,0,sizeof(fiu));
	}
} ;
trie *t=new trie;

void querry2 (trie *nod)
{
	ch=*p-'a';
	if (*p==0 || nod->fiu[ch]==0)
		return ;
	else
	{
		p++;
		niv++;
		querry2(nod->fiu[ch]);
	}
}

int querry1(trie *nod)
{
	if (*p==0)
		return nod->cnt;
	else
	{
		ch=*p-'a';
		p++;
		if (nod->fiu[ch])
		return (querry1(nod->fiu[ch]));
		else return 0;
	}
}

int  sterg (trie *nod)
{
	if (*p==0)
		nod->cnt--;
	else
	{
		ch=*p-'a';
		p++;
		if (sterg(nod->fiu[ch]))
		{
			p--;
			ch=*p-'a';
			nod->nrfii--;
			nod->fiu[ch]=0;
		}
	}
	if (nod->cnt==0 && nod->nrfii==0 && nod!=t)
		{
			delete nod;
			return 1;
		}
	return 0;
}

void insert (trie * nod )
{
	if (*p==0)
	{
		nod->cnt++;
		return ;
	}
	ch=*p-'a';
	if (nod->fiu[ch]==0)
	{
		nod->fiu[ch]=new trie;
		nod->nrfii++;
	}
	*p++;
	insert (nod->fiu[ch]);
}	

int main()
{
	char s[30];
	int op,k;
	int ch;
	ofstream g("trie.out");
	ifstream f("trie.in");
	while (f>>op)
	{
		f>>s;
		p=s;
		if (op==0) insert(t);
		else if (op==1) sterg(t);
		else if (op==2)
			{
				k=querry1(t);
				g<<k<<'\n';
			}
			else  
					{ 
						niv=0; 
						querry2(t); 
						g<<niv<<'\n';
					}

	}
	f.close();
	return 0;
}