/* Procura pelo elemento KEY na Trie, a partir de pos e com n elementos */
char* find2(Trie *node, const char * key, int pos, int n, int *idx) 
{
	if(pos == n) 
	{	
		/* Achou */
		*idx = node->idx;
		return node->elem;
	} else {
		if(node->branch[mapChar(key[pos])] == NULL) {
			/* Não Achou */
			return NULL;	
		} 
		else return find2(node->branch[mapChar(key[pos])], key, pos+1, n, idx);
	}
}
void insert_i(Trie * node, const char * key, const char * val, int pos, int n, int idx) 
{
	if( pos == n) 
	{	
		/* Se achou o elemento */
		int size = strlen(val);

		/* Se ainda está nulo, aloca o espaço */
		if(node->elem == NULL) 
			node->elem = (char*) malloc(sizeof(char) * size);
		/* Copia o identificador para a posição correta */
		strcpy(node->elem, val);

		node->idx = idx;
	} else {
		/* Se o nó que precisa ser inserido está nulo, alocar */
		if(node->branch[mapChar(val[pos])] == NULL) {
			node->branch[mapChar(val[pos])] = (Trie*) malloc(sizeof(Trie));
			initializeTrie(node->branch[mapChar(val[pos])]);
		}

 		insert_i(node->branch[mapChar(val[pos])], key, val, pos+1, n, idx);
	}
}
Exemple #3
0
int subChar(char a, char b){
	return mapChar(a) - mapChar(b);
}