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
codigo.h
desde ya muchas gracias!
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


0