字典树实现模板

构建一颗自动树的代码模板

class Trie {

public:

     // 利用this 的特性在当前类上直接构建一颗 字典树

    //字典树 多叉树-》要用到指针数组来存储子树根节点

    vector<Trie*> children;//C++ 会自动将字符初始化为空指针

    bool isend;

    Trie():children(26),isend(false) {

    }

    Trie * searchPrefix(string prefix){

        Trie * node=this;

        for(auto i:prefix){

            i-='a';

            if(node->children[i]==nullptr){

              return nullptr;

            }

            node=node->children[i];//迭代法查找多叉映射树

        }

        return node;

    }

   

    void insert(string word) {

        Trie * node=this;

        for(auto i:word){

            i-='a';

            if(node->children[i]==nullptr){

                node->children[i]=new Trie();//new Trie();C++ 允许的写法 分配一Trie 大小的空间 并且调用构造函数 对其进行初始化

            }

            node=node->children[i];

        }

        node->isend=true;

    }

   

    bool search(string word) {

        Trie *node =this->searchPrefix(word);

        return node!=nullptr&&node->isend;

    }

   

    bool startsWith(string prefix) {

            return this->searchPrefix(prefix)!=nullptr;

    }

};

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值