单词补全原理及 Rust 简单实现
前注:本文的实现参考了此 Github 仓库: https://github.com/Blightmud/rs-complete

实现目标
先引用 rs-complete 项目 README 中的一段文字来说明本文的实现目标:
假如我们有一个词库(能看出该项目的作者挺喜欢蝙蝠侠的)
我们使用这个词库,以每个字母为节点,构建一颗树,如下所示:
然后,我们使用单词片段batm
进行查找,可以通过遍历这颗树来得到:
实现原理解释
单词插入
现在,让我们假设存在一颗空树,
我们需要插入一个单词 "abcd"
,由于当前树为空,我们可以很简单地遍历这个单词,将每一个字母新建节点,插入到树中。
让我们再插入一个单词 "befg
",步骤与之前插入单词类似,遍历这个单词,并插入到树中。
让我们再插入一个单词 "abef
",步骤与之前插入单词类似,遍历这个单词,并插入到树中。
使用单词片段查找
让我们复用上面的这棵树,尝试使用单词片段ab
进行查找。
在对单词片段进行遍历后,我们得到了需要遍历的子树。
对这棵子树进行遍历,我们就可以获得用来补全单词片段ab
的字符串数组:

代码实现
节点定义
注:由于我们是通过将单词拆分成单独的字母来作为节点进行存储,且字母本身是具有有序性的,因此在这里使用 TreeMap(BTreeMap in Rust) 的方式存储数据。
节点方法实现
新建
插入
补全
根节点的定义及实现
这里只是对上文中节点方法的封装,就不过多阐述了。
测试代码
结果:

完整代码