Trie数据结构:如何在搜索单词时防止误报?

时间:2017-10-02 03:35:58

标签: data-structures trie recursive-datastructures

class Node{  
 Map<Character,Node> childMap = new HashMap<>();
 boolean isWord;
}

trie数据节点通常作为上述类进行重新创建。 我们假设我们插入了

  • &#34;坏&#34;
  • &#34;父&#34;
进入特里。
如果在trie中搜索trie &#34; pad&#34; ,则不会返回 a&#34; true&#34; 哪个错了?

2 个答案:

答案 0 :(得分:1)

不,它不会返回真实。如果是这样,你的代码中有一个错误,或者你不理解trie的概念。

如果您插入“bad”和“parent”,则trie将如下所示:

(root)->b->a->d
  |  
  +---->p->a->r->e->n->t
找不到“pad”

答案 1 :(得分:0)

不完全。 Trie通常使用递归结构(复合模式)实现,正如您正确指出的那样。然而,这正是阻止它为“pad”返回true的原因,因为在插入“parent”后,结构看起来像

root
    b
        a
            d
    p
        a
            r
                e
                    n
                        t

所以跟随Trie,任何以“p”开头的东西都不会和“d”开始。

但是,在Trie实现中经常会遇到另一个挑战,这需要最后一步来确定您是否确实找到了一个完整的单词或只是一个前缀。这正是你的例子中isWord变量的用途。因此,在迭代节点后,您必须测试该属性。