前缀树 Trie (读音与tree类似)
我认为写一个前缀树最重要的思想就是节点node,这个node含义与二叉树类似,但是在前缀树中每一个字母就是一个节点,同时把每个新节点看作一个新的前缀树开端,最终的节点设为isEnd
class Trie {
Trie[] children;
boolean isEnd;
//初始化
public Trie() {
children = new Trie[26];
isEnd = false;
}
//插入
public void insert(String word) {
Trie node = this;
for (char c : word.toCharArray()) {
if (node.children[c - 'a'] == null) {
node.children[c - 'a'] = new Trie();
}
node = node.children[c - 'a'];
}
node.isEnd = true;
}
//查找
public boolean search(String word) {
Trie node = this;
for (char c : word.toCharArray()) {
if (node.children[c - 'a'] == null) {
return false;
}
node = node.children[c - 'a'];
}
return node.isEnd;
}
//前缀匹配
public boolean startsWith(String prefix) {
Trie node = this;
for (char c : prefix.toCharArray()) {
if (node.children[c - 'a'] == null) {
return false;
}
node = node.children[c - 'a'];
}
return true;
}
}
/**
* Your Trie object will be instantiated and called as such:
* Trie obj = new Trie();
* obj.insert(word);
* boolean param_2 = obj.search(word);
* boolean param_3 = obj.startsWith(prefix);
*/