数据结构:Trie(单词查找树,字典树,前缀树)

Trie简介

Trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。【来自维基百科】
《数据结构:Trie(单词查找树,字典树,前缀树)》

TrieNode结构

#define ALPHA_SIZE 26 ///这里假定单词只有小写 
class TrieNode
{
public:
    vector<TrieNode *> children; ///叶子节点指针
    bool isEnd; ///用于标记当前叶子是否映射到一个单词上

    TrieNode()
    {
        isEnd = false;
        children = vector<TrieNode *>(ALPHA_SIZE, nullptr);
    }
};

Trie的插入操作

Step1:遍历单词的字符,对每个字符 c,执行Step2~Step3
Step2:判断当前节点curNode的children[c – ‘a’]是否为空,若为空为curNode->children[c]创建一个新的TrieNode
Step3:curNode = curNode->chidlren[c – ‘a’]。回到Step1

Trie的构建操作

首先创建root节点,然后对每个单词,分别进行插入操作

Trie的查找操作

Step1:遍历单词的字符,对每个字符c,执行Step2
Step2:判断当前节点curNode的children[c – ‘a’]是否为空,如果为空返回false,如果为true,curNode = curNode->chidlren[c – ‘a’],回到Step1
Step3:返回true。

The End

    原文作者:Trie树
    原文地址: https://blog.csdn.net/damontive/article/details/79121449
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞