Java 前缀树Trie(字典树、单词查找树)

时间:2024-03-31 22:51:28

前缀树也称字典树、单词查找树。

字典树是一种多叉树。

之前我学习的映射,本身也可以称为字典,只不过和我们现在要说的字典树Trie不同。下面对映射字典和字典树Trie做性能比较:

Java 前缀树Trie(字典树、单词查找树)         

 

Trie的结构如图所示:

Java 前缀树Trie(字典树、单词查找树)

Trie的定义:

例如:每个节点有26个指向下个节点的指针。

Java 前缀树Trie(字典树、单词查找树)

不过这里的26并不是一定的,如果字母有大小写,就要改成52,如果有加入其他特殊字符,又是不同的。

应该考虑不同的语言,不同的情境。所以每个节点有若干指向下个节点的指针。此时即需要动态的实现。

Java 前缀树Trie(字典树、单词查找树)

此时运用上了映射数据结构。

简单描述Trie的查找过程:和之前学的二叉树不一样,Trie的查找,知道key要来查找value,在知道key,也可以说是要查找的位置或者路径的同时,就可以说是已经查找到了该value了。

Java 前缀树Trie(字典树、单词查找树)

所以此时把char c去掉完全没有问题。

Java 前缀树Trie(字典树、单词查找树)

例如要查找单词pan,在知道p位置之后,接着要查找a,再查找n,此时的n并不是叶子节点。而pan又是panda的前缀,所以说访问一个单词并不是一定要访问到叶子节点为止,所以需要定义一个变量来表示该字母是否代表一个单词的结尾。

Java 前缀树Trie(字典树、单词查找树)

isWord表示是否已经访问到了一个单词。

 

 

 

 

 

相关文章