Trie en C: ejercicio resuelto
Trie en C: ejercicio resuelto
Si buscas trie en C ejercicio resuelto, aquí tienes la implementación con asignación dinámica que cubre inserción, búsqueda exacta y búsqueda de prefijo. Un trie (árbol de prefijos o árbol digital) almacena cadenas compartiéndolas carácter a carácter, lo que permite búsquedas en O(m) donde m es la longitud de la clave, independientemente de cuántas cadenas haya en la estructura.
Enunciado
Implementa un trie para el alfabeto de letras minúsculas que soporte:
trie_insertar(raiz, palabra): inserta una palabra.trie_buscar(raiz, palabra): devuelve 1 si la palabra exacta existe.trie_prefijo(raiz, prefijo): devuelve 1 si alguna palabra comienza con el prefijo.
Inserta ["casa", "caro", "carta", "perro", "pez"] y prueba varias búsquedas.
Solución en C
Resultado esperado
Errores frecuentes
- Confundir búsqueda exacta con búsqueda de prefijo:
trie_buscarsolo devuelve 1 sifin_palabraestá activo en el nodo final;trie_prefijosolo verifica que el camino exista. - No usar
calloco no inicializar los punteros de hijos aNULL: si quedan con valores basura, las comparacionesif (!cur->hijos[idx])son incorrectas. - No manejar caracteres fuera del alfabeto soportado: un carácter como
'Z'(mayúscula) da un índice negativo y corrompe la memoria. Hay que validar la entrada. - No liberar el trie al final: cada nodo es un
malloc/callocindependiente; hay que recorrer en postorden para liberarlos todos.
Aplicación práctica
Los tries se usan en autocompletado (buscadores, IDEs), corrección ortográfica, compresión de datos (LZW), enrutamiento IP con prefijos CIDR y en la implementación de diccionarios con búsqueda por prefijo.
Siguiente ejercicio recomendado
- Deque en C: ejercicio resuelto
- Árbol binario en C: ejercicio resuelto
- Min-heap en C: ejercicio resuelto
- Todos los ejercicios de C
Práctica guiada y libro completo
Si quieres una ruta completa con progresión real de dificultad:
FAQ
¿Cuánta memoria consume un trie?
Cada nodo almacena 26 punteros (con el alfabeto a-z), lo que consume 26 × 8 = 208 bytes en sistemas de 64 bits más el campo fin_palabra. Para vocabularios pequeños esto puede ser ineficiente; la alternativa es el trie compacto (Patricia/Radix trie) que comprime los caminos sin bifurcaciones.
¿Por qué el trie es más rápido que una tabla hash para búsquedas por prefijo?
Una tabla hash requiere buscar cada clave individualmente para verificar si comienza con un prefijo dado. El trie lo resuelve en O(m) sin recorrer toda la estructura: basta con seguir el camino del prefijo y verificar si existe al menos un descendiente.
¿Se puede usar el trie para cadenas Unicode?
Sí, pero el tamaño del array de hijos debe aumentar (o usar un mapa hijo-→-nodo como tabla hash o árbol binario de búsqueda) para cubrir todos los posibles puntos de código. La implementación más práctica con Unicode es el trie con mapa de dispersión en cada nodo.