Data structures Trie数据结构:tp如何在搜索单词时防止误报? 类节点{ Map childMap=newhashmap(); 布尔字; }

Data structures Trie数据结构:tp如何在搜索单词时防止误报? 类节点{ Map childMap=newhashmap(); 布尔字; },data-structures,trie,recursive-datastructures,Data Structures,Trie,Recursive Datastructures,trie数据节点通常表示为上述类。 假设我们插入了 “坏的” “家长” 进入的黎波里。 如果在trie中搜索“pad”,它不会返回吗 一个“true”哪个是错误的?不,它不会返回true。如果是这样,要么是代码中有bug,要么是您不理解trie的概念 如果插入“bad”和“parent”,trie将如下所示: class Node{ Map<Character,Node> childMap = new HashMap<>(); boolean isWord;

trie数据节点通常表示为上述类。 假设我们插入了

  • “坏的”
  • “家长”
进入的黎波里。
如果在trie中搜索“pad”,它不会返回吗
一个“true”哪个是错误的?

不,它不会返回true。如果是这样,要么是代码中有bug,要么是您不理解trie的概念

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

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

找不到“pad”

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

(root)->b->a->d
  |  
  +---->p->a->r->e->n->t
因此,在Trie之后,任何以“p”开头的内容都不会出现在“d”上

然而,在Trie实现中通常还有另一个挑战,这需要最后一步来确定您是否真正找到了一个完整的单词或只是一个前缀。这正是isWord变量在您的示例中的作用。因此,在遍历节点之后,您需要测试该属性

root
    b
        a
            d
    p
        a
            r
                e
                    n
                        t