Pagini recente » Cod sursa (job #2050682) | Cod sursa (job #521464) | Cod sursa (job #1247529) | Cod sursa (job #929740) | Cod sursa (job #2166864)
#include <bits/stdc++.h>
using namespace std;
const int alfbet = 26;
ifstream f("trie.in");
ofstream g("trie.out");
struct TrieNode
{
int nr;
int fii;
struct TrieNode *next[alfbet];
TrieNode ()
{
nr = 0;
fii = 0;
memset(next, NULL, sizeof(next));
}
};
TrieNode *t = new TrieNode;
void TrieInsert ( TrieNode *root , char s[] )
{
TrieNode *p = root;
for (int i = 0 ; i < strlen(s) ; i++)
{
int index = s[i] - 'a';
if( !p->next[index])
{
p->next[index] = new TrieNode;
p->fii++;
}
p = p->next[index];
}
p->nr++;
}
int TrieDelete ( TrieNode *root, char *s )
{
TrieNode *p = root;
int index = *s - 'a';
if ( *s == NULL)
p->nr--;
else if (TrieDelete( p->next[index] , s + 1))
{
p->next[index] = NULL;
p->fii--;
}
if( p->nr == 0 && p->fii == 0 && p != t )
{
delete p;
return 1;
}
return 0;
}
int TrieSearch( TrieNode *root, char s[])
{
TrieNode *p = root;
for( int i = 0 ; i < strlen(s) ; i++)
{
int index = s[i] - 'a';
if(!p->next[index])
return 0;
p = p->next[index];
}
return p->nr;
}
int TriePre( TrieNode *root, char s[])
{
int i;
TrieNode *p = root;
for(i = 0 ; i < strlen (s); i++ )
{
int index = s[i] - 'a';
if( p ->next[index] == NULL )
return i;
p = p->next[index];
}
return i;
}
int n, op;
char word[21];
int main()
{
while(f>>op>>word)
{
switch (op)
{
case 0:
TrieInsert(t , word);
break;
case 1:
TrieDelete(t, word);
break;
case 2:
g<<TrieSearch(t, word)<<"\n";
break;
case 3:
g<<TriePre(t, word)<<"\n";
break;
}
}
}