Trie Tree 简介
Trie Tree,又称单词字典树、查找树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。
性质
它有3个基本性质:
- 根节点不包含字符,除根节点外每一个节点都只包含一个字符。
- 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
- 每个节点的所有子节点包含的字符都不相同。
Trie Tree 结构

Trie Tree
//javascript实现字典树trie,简单的实现下
class TrieNode {
constructor(value){
this.value = value; //value为单个字符
this.num=1;
this.deep=0;//根节点默认0
this.son=[];
this.isEnd=false;
}
findNode(value){
for(let i=0;i<this.son.length;i++){
const node=this.son[i]
if(node.value == value){
return node;
}
}
return null;
}
}
class Trie {
constructor(){
this.root=new TrieNode(null);
this.size=1;//一开始的时候只有根节点这一个节点
}
insert(str){
let node=this.root;
for(let c of str){
let snode = node.findNode(c);
if(snode==null){
snode=new TrieNode(c)
snode.deep=node.deep+1;
node.son.push(snode);
}else{
snode.num++;//有N个字符串经过它
}
node=snode;
}
//如果当前的node已经是一个word,则不需要添加
if (!node.isEnd) {
this.size++;
node.isEnd = true;
}
}
has(str){
let node=this.root;
for(let c of str){
const snode=node.findNode(c)
if(snode){
node=snode;
}else{
return false;
}
}
return node.isEnd;
}
}
//demo
const nt=new Trie()
nt.insert('name');
nt.insert('word');
nt.insert('happy');
nt.insert('trie');
// console.log(nt.root['d'])
console.log(nt.has('has'))
console.log(nt.has('trie'))
console.log(nt.has('word'))