C/Visual C - Arbol Trie

   
Vista:

Arbol Trie

Publicado por Agusto (2 intervenciones) el 29/06/2012 06:45:16
buenaasss! necesito ayuda urgente estoy trabajando con la implementacion de un árbol trie que ingresa palabras y guarda en cada nodo una letra de cada palabra dependiendo de su combinación por ejemplo


c
/
a
/ \
s m
/ \ \
a o a


tengo que poder imprimirlo y revisar que esten las palabras
hasta ahora el codigo que tengo es el siguiente

codigo.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "mydefs.h"
#include "arboltrie.h"
 
int raiz;
int numNodos;
 
void inicNodo (TTrie *n) {
	int i;
	n->marca = 0;
	for (i=0; i<MAX ; i++)
		n->puntero[i]=NULL;
}
 
TTrie * NuevoNodo (int info) {
	TTrie *nnodo;
 
	numNodos++;
 
	nnodo = (TTrie *) malloc (sizeof(TTrie));
 
	inicNodo (nnodo);
 
}
 
void inicTrie () {
	inicNodo(&raiz);
	numNodos=0;
}
 
void insTrie (char *palabra) {
 
	TTrie (*actNodo) = &raiz;
	char *actLetra;		//para hacer una copia de la palabra y trabajar con ella
	int posLetra;		//la posicion que le toca a la letra dentro del arreglo
 
	if (palabra== NULL || *palabra == '\0') {
		printf("error: palabra nula");
		return;
	}
 
	actLetra = palabra; //realizamos copia
 
	while(*actLetra != '\0') {
		posLetra = tolower(*actLetra) - 'a'; //calculamos la posicion del arreglo donde ira la letra, teniendo en cuenta que hay q pasarlo a minuscula
		if (posLetra < 0 || posLetra >= MAX) {	//se revisa que se ingrese un caracter valido de la [a-z]
			printf("error: caracter no valido");
			return;
		}
		if (actNodo->puntero[posLetra] == NULL)
			actNodo->puntero[posLetra] = NuevoNodo(posLetra); //creamos nodo y enlazamos
 
		actNodo = actNodo->puntero[posLetra];
		actLetra++;
	}
	if (actNodo->marca ==1)
		printf("Ya estaba insertada\n");
	else {
		actNodo->marca=1;
	}
}



codigo.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define MAX 26
 
 
typedef struct NodoTRIE TTrie;
struct NodoTRIE {
	char info;			//para las letras
	short int marca; 	//para controlar si es final de palabra
	TTrie *puntero[MAX];  // tantos punteros como letras sean
};
 
 
void inicNodo (TTrie *n);
void inicTrie ();
void insTrie (char *palabra);
TTrie * NuevoNodo (int info);



desde ya muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder