我有一个Java中的Trie,我想要搜索一下这个词。
例如:Trie:[casa-perro-animal],hogar = false; casa = true;
public boolean search (String word){
/**Method to complete**/
}
带有Node的类Trie:
public class Trie {
/**
* Clase auxiliar para guardar caracteres que forman parte de una palabra
* @author zenon
*/
protected class Info {
char c; // Caracter actual
Info alt; // Caracter alternativo para la misma posición
Info next; // Caracter que es la primera opción en la siguiente posición
public Info(char c, Info alt, Info next) {
this.c = c;
this.alt = alt;
this.next = next;
}
}
protected Info root; // Referencia al punto de inicio de la estructura
有任何帮助吗?我是西班牙人。非常感谢你。
答案 0 :(得分:0)
您正在查看Trie的doubly chained tree实施:
<子> image and description from wikipedia's entry on Trie 子>
垂直箭头是子指针,虚线水平箭头是下一个指针。存储在此trie中的字符串集是{baby, bad, bank, box, dad, dance}
。列表被排序为允许以字典顺序遍历
您的搜索必须逐个使用已搜索的word
中的字符并导航特里。
取第一个字符并检查您的根是否包含它。如果是,您可以移动到word
中的下一个字符,然后沿实线箭头向下移动到当前列表的下一个节点 - 在您的实现中,它是next
节点输入Info
。这样您就可以向下遍历相同的列表(根据上图)。
如果当前节点不包含您要搜索的字符,则水平移动到下一个替代列表(沿虚线)。在您的情况下,这由alt
Info
节点表示。你在那里重复同一个字母的测试。如果没有运气,请再次转到下一个替代清单。
如果您在给定级别检查了所有其他列表而没有任何匹配,并且面临死胡同(alt == null
),则可以得出结论word
不包含在 trie 中。
相反,如果您使用了word
中的所有字符并且位于列表中的最后一个节点(即next == null
),那么您可以得出结论{{ 1}}存储在 trie 。