Trie 树是一种树形结构,主要用来处理的问题是在一堆字符串中查找某个字符串。它的本质是将利用字符串的公共前缀子串,将公共前缀的字符串合并到一起。它又称为“字典树”,为了便于查找,一般考虑用一个数组类型的数据结构作为它的子节点。
为了更好的利用 trie 树这种结构,一般要求存储的字符串集合具有较多的公共前缀,且字符串的字符集不能太大
public class TrieNode {
public char data;
public TrieNode[] child = new TrieNode[26];
public boolean isEnd = false;
public TrieNode(char data) {
this.data = data;
}
}
public class Trie {
private TrieNode root = new TrieNode('/');
// 构造 trie 树
public void insertTrieTree(char[] text){
TrieNode p = root;
for(int i = 0; i < text.length; i++){
int index = text[i] - 'a';
if(p.child[index] == null){
p.child[index] = new TrieNode(text[i]);
}
p = p.child[index];
}
p.isEnd = true;
}
// 查询
public boolean query(char[] text){
TrieNode p = root;
for(int i = 0; i < text.length; i++){
int index = text[i] - 'a';
if(p.child[index] == null){
return false;
}
p = p.child[index];
}
if(p.isEnd == false) return false;
return true;
}
}