Trie树
Trie这个名字取自“retrieval”,检索,因为Trie可以只用一个前缀便可以在一部字典中找到想要的单词。
虽然发音与「Tree」一致,但为了将这种 字典树 与 普通二叉树 以示区别,程序员小吴一般读「Trie」尾部会重读一声,可以理解为读「TreeE」。
Trie树,也叫“字典树”。顾名思义,它是一个树形结构。它是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串的问题。
Key都为字符串,能做到高效查询和插入,时间复杂度为O(k),k为字符串长度,缺点是如果大量字符串没有共同前缀时很耗内存。
其实比较好理解
1.插入
分两种情况,
1.是该单词 不是前缀词:从根节点开始 往下一个字符一个字符的分支,类似查英语字典。如果有前缀词,继续往下找,如果没有就开始逐个字符的插入了。最后一个字母做标识位。
2.是该单词 不是前缀词:例如 如果 已经存在单词 code,现在需要插入一个新单词 cod,则沿着树追索到 节点 d,将d 设置为标识位,即可。
2.查找
沿着树追索就可以了。找到标识位,就表示有这个字符串了。
3. 删除
先查找。找到后往回追索,如果是叶子节点就删除,不是叶子节点就停止。