Avanzado
20 min
Guía completa
Tries
Estructura Trie para operaciones eficientes con cadenas
¿Qué es un Trie?
Un Trie (árbol de prefijos) es una estructura tipo árbol para almacenar strings. Cada nodo representa un carácter, ideal para autocompletado, correctores y búsqueda por prefijos.
Implementación de Trie
class TrieNode {
constructor() {
this.children = {};
this.isEndOfWord = false;
}
}
class Trie {
constructor() {
this.root = new TrieNode();
}
insert(word) {
let node = this.root;
for (const char of word) {
if (!node.children[char]) {
node.children[char] = new TrieNode();
}
node = node.children[char];
}
node.isEndOfWord = true;
}
search(word) {
let node = this.root;
for (const char of word) {
if (!node.children[char]) return false;
node = node.children[char];
}
return node.isEndOfWord;
}
startsWith(prefix) {
let node = this.root;
for (const char of prefix) {
if (!node.children[char]) return false;
node = node.children[char];
}
return true;
}
autocomplete(prefix) {
let node = this.root;
// Navigate to prefix
for (const char of prefix) {
if (!node.children[char]) return [];
node = node.children[char];
}
// Collect all words with this prefix
const results = [];
this.collectWords(node, prefix, results);
return results;
}
collectWords(node, currentWord, results) {
if (node.isEndOfWord) {
results.push(currentWord);
}
for (const char in node.children) {
this.collectWords(node.children[char], currentWord + char, results);
}
}
}
// Usage
const trie = new Trie();
trie.insert("apple");
trie.insert("app");
trie.insert("application");
console.log(trie.search("app")); // true
console.log(trie.startsWith("app")); // true
console.log(trie.autocomplete("app")); // ['app', 'apple', 'application']Tiempo: Insert/Search/StartsWith: O(m) donde m = longitud de palabra | Espacio: O(ALPHABET_SIZE * N * M)