zoukankan      html  css  js  c++  java
  • Trie树

    问题模型:给定一个字典中的所有单词,然后每次给出一个单词进行询问是否为字典中的单词

    对字典中的每一个单词,将这个单词转化为字典树的”一根树枝“,及从根节点往下延伸,按照顺序每个节点对应一个该单词中的字母。

    例如age,an

                                   root

            a        

           g  n

          e    

    建树:

    struct trie
    {
        trie *next[maxn];//子节点数组
        bool last;//记录此节点储存字母是否为一个单词的末尾字母
        
        trie()//构造函数初始化赋值
        {
            memset(next,0,sizeof(next));
            last = false;
        }
    };
    trie *root;
    void init()//为root分配空间
    {
      root = new trie;
    }

    插入单词:

    void insert(char s[])
    {
        trie *p = root;
        for( int i = 0; i < (int)strlen(s); ++i )
        {
            if( !p->next[s[i]-'a'] )//该字母对应节点不存在
                p->next[s[i]-'a'] = new trie;
            p = p->next[s[i]-'a'];//转移,向下继续搜索
        }
        p->last = true;//节点末尾标记为真
    }

    查询:

    bool query(char s[])
    {
        trie *p = root;
        for( int i = 0; i < (int)strlen(s); ++i )
        {
            if( !p->next[s[i]-'a'] )//无节点对应该字母
                return false;
            p = p->next[s[i]-'a'];//继续查找
        }
        if(p->last ) return true;//该单词最后一个字母为树中储存单词的结尾,并非前缀
        else return false;
    }
  • 相关阅读:
    对《应试教育》有感
    月总结
    有趣的生活,有趣的比赛
    H5之js拼接select级联优化
    H5之js拼接select与input的级联
    OA-分页查询(抽象最终版)二
    OA-分页查询(抽象最终版)一
    今目标反思
    电子商务运作的随想
    旅游票务网站
  • 原文地址:https://www.cnblogs.com/mile-star/p/10771716.html
Copyright © 2011-2022 走看看