问题描述 来源:LeetCode第208题 难度:中等 Trie(发音类似"try")或者说前缀树是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。 请你实现 Trie 类:
示例:
提示:
问题分析 Trie树也叫字典树,就像查字典一样,比如在字典中我们要找wo,第一步需要找到w,然后第2步再找o。其实我们可以把它看做是一棵n叉树,就是每个节点下面最多有n个子节点。题中说了word和prefix仅由小写英文字母组成,因为小写英文字母有26个,所以我们可以把它看做是一棵26叉树。如下图所示 他有一个根节点,根节点是不存储任何值的,然后根节点下面最多有26个子节点,每个子节点最多又有26个子节点……,比如字符串 “ac”,“bcd”,“ace”,“ef” 在字典树中是这样存在的 但是这里会有一个问题,我们没有储藏字符串“bc”,但上面字典树中包含字符串“bc”,其中还包括字符串“a”,“b”,“e”。实际上他们都不是一个完整的字符串,而是我们储藏字符串的前缀。那么怎么确定是否是一个完整的字符串中,我们需要对字符串的最后一个字符进行标记,如下图所示 如上图所示,因为字符串“bc”的最后一个字符“c”没有被标记,所以字符串“bc”不是一个完整的字符串。至于怎么标记大家可以自己定,这里我们通过一个boolean类标来标记,节点类如下
注意这里的节点类并没有存储单个字符,我们根据他是否为空来判断相对应的字符是否存在。比如我们查找字符a,因为a是26个节点中的第一个,我们只需要判断第一个子节点是否为空即可。如果为空表示a不存在,否则表示a存在,我们来看下完整代码
|
|