构造前缀树(Java实现)
前缀树(TrieTree)
定义
前缀树:称又Trie树,是一种存储大量字符串的树形数据结构。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,提高查询效率。
从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
代码实现
class Trie {
public static class TrieNode {
private boolean isEnd;
private TrieNode[] childern;
private char val;
public TrieNode() {
isEnd = false;
childern = new TrieNode[26];
}
}
private TrieNode root;
public Trie() {
root = new TrieNode();
}
public void insert(String word) {
TrieNode cur = root;
for(char ch : word.toCharArray()){
int idx = ch - 'a';
if (cur.childern[idx] == null){
cur.childern[idx] = new TrieNode();
cur.childern[idx].val = ch;
}
cur = cur.childern[idx];
}
cur.isEnd = true;
}
public boolean search(String word) {
TrieNode cur = root;
for(char ch : word.toCharArray()){
int idx = ch - 'a';
if (cur.childern[idx] == null){
return false;
}
cur = cur.childern[idx];
}
return cur.isEnd == true;
}
public boolean startsWith(String prefix) {
TrieNode cur = root;
for(char ch : prefix.toCharArray()){
int idx = ch - 'a';
if (cur.childern[idx] == null){
return false;
}
cur = cur.childern[idx];
}
return true;
}
}
习题练习:208. 实现 Trie (前缀树)(https://leetcode-cn.com/problems/implement-trie-prefix-tree/)
820. 单词的压缩编码(https://leetcode-cn.com/problems/short-encoding-of-words/)