特性
Trie树属于树形结构,又称字典树、前缀树。查询效率比红黑树和哈希表都要快。假设有这么一种应用场景:有若干个英文单词,需要快速查找某个单词是否存在于字典中。使 用Trie时先从根节点开始查找,直至匹配到给出字符串的最后一个节点。在建立字典树结构时,预先把带有相同前缀的单词合并在同一节点,直至两个单词的某 一个字母不同,则再从发生差异的节点中分叉一个子节点。适合这种以公共前缀进行查询的场合
节点结构:
每个节点对应一个最大可储存字符数组。假设字典只存26个小写英文字母,那么每个节点下应该有一个长度为26的数组。换言说,可存的元素类型越多,单个节
点占用内存越大。如果用字典树储存汉字,那么每个节点必须为数千个常用汉字开辟一个数组作为储存空间,占用的内存实在不是一个数量级。不过Trie树就是
一种用空间换时间的数据结构,鱼和熊掌往往不可兼得。
建树细节:
- 取要插入字符串的首个字符,从根节点的孩子节点开始,匹配当前字符是否已有节点,有则把指针指向该节点。无则为该字符创建节点,并把指针指向该新建节点。
- 迭代。
- 遇到要插入字符串末尾结束符时停止迭代,并把最后一个非’ ’字符对应的节点设为末端节点。
查找细节:
循环取要插入字符串的首个字符,从根节点的孩子节点开始,匹配当前字符是否已有节点,有则继续循环,无则返回False. 直至匹配到最后一个字符则完成查找。
树结构图:
我们用apps, apply, apple, append, back, basic, backen几英文单词创建树形结构: