Trie 树构造原理
字典树,又称 Trie 树,是一种专门用于字符串匹配的树形结构,能够高效的在一组字符串中寻找所求字符串,与红黑树,散列表类似,但是又有其优势。
如何构造一颗 Trie 树
假设我们有一组字符串:abc
,adf
,adrf
,siab
。
Trie 树的本质,就是利用字符串之间的公共前缀,将重复的前缀合并在一起。如图:
根节点不包含任何信息,从根节点一路往下到灰色节点,便是一个字符串。
注意:灰色节点并不一定是叶子节点,当字符串组中存在abc
,abcdfg
这样的时,前者是后者的前缀,为了区分是两个字符串,需要给每个字符串的结尾字符做标记。
在Trie树中查找
假设我们要查找abf
,先将其拆分成 单个字符,按照下图路径,一层一层比较查找。直到最后一个字符恰好存在并且是灰色节点。
如何构造一颗 Trie 树
上述分析可知,字典树是一颗多叉树,二叉树中是通过左右子节点指针实现的,那么多叉树该如何实现呢?
//二叉树
class BinaryTreeNode{
char data;
BinaryTreeNode left;//左子节点
BinaryTreeNode right;//右子节点
}
假设当前字符串只包含a-z
26 个字符,那么可以使用 26 个单位的子节点数组来实现:
class TriaTree{
char data;
bool isEndingChar;
TriaTree node[26];
}