首页 > 代码库 > 字典树
字典树
字典树
字典树又叫tire树,是个简单但是非常实用的数据结构,通常用于字符串的处理或者字典查询。本质上,Trie是一颗存储多个字符串的树。相邻节点间的边代表一个字符,这样树的每条分支代表一则子串,而树的叶节点则代表完整的字符串。和普通树不同的地方是,相同的字符串前缀共享同一条分支。还是例子最清楚。给出一组单词,inn, int, at, age, adv, ant, 我们可以得到下面的Trie:
从图中可以看出:
- 每条边代表一个字符
- 每个节点对应一项前缀。叶节点前缀最长,即一个单词本身。
- 单词inn和int共享单词前缀in,因此他们共享左边的一条分支为root->i->in。‘a‘系列的分支同理。
- 查询也非常简单。比如要查找int顺着从根节点root找下来就好了,root->i->in->int。
- 搭建Trie的基本算法也很简单,无非是逐一把每则单词的每个字母插入Trie。插入前先看前缀是否存在。如果存在,就共享,否则创建对应的节点和边。比如要插入单词add,就有下面几步:
- 先从根节点出发,然后是字符‘a‘,发现字符‘a‘已经存在,那么共享。
- 再到‘d‘,又发现‘d‘也已经存在,共享。
- 再从‘ad‘向后再找一个‘d‘,发现不再存在,这时建一条边,从‘ad‘连向‘d‘构成‘add‘。(建议用指针写,省点空间)
字典树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。