字典树Trie
又称单词查找树或者键树,是一种树结构,一种哈希树的变种。典型应用是用于统计和排序大量的字符串,经常被搜索引擎系统用于文本词频统计。
基本性质
- 根节点不包含字符,除根节点外每一个节点都包含一个字符
- 从根节点到某一个节点,路径上经过的字符串链接起来,为该节点对应的字符串
- 每个节点的所有子节点包含的字符都不相同
实现一个字典树
// 字典树
class Trie {
constructor() {
this.children = {};
this.endOfWord = '#';
}
insert(word) {
let node = this.children;
for (const ch of word) {
if (!node[ch]) {
node[ch] = {};
}
node = node[ch];
}
node.isEnd = this.endOfWord;
}
searchPrefix(prefix) {
let node = this.children;
for (const ch of prefix) {
if (!node[ch]) {
return false;
}
node = node[ch];
}
return node;
}
search(word) {
let node = this.searchPrefix(word);
return node !== undefined && node.isEnd === this.endOfWord;
}
startsWith(prefix) {
return this.searchPrefix(prefix);
}
}