Leetcode典型题解答和分析、归纳和汇总——T208(实现Trie前缀树)

问题描述:

实现一个Trie前缀树,包含insert、search和startsWith这三个操作。

问题分析:

这类的题目与堆栈的最小元素查找类似,将所有功能进行集中处理。

首先我们需要明确一下trie树的基本概念:它又称为:字典树、前缀树、单词查找树等。

其基本数据结构定义为:

与其他普通树的定义存在明显区别。最明显的差别就是Bool型变量来表征其节点是否为结束值,而TrieNode的下一个节点是指向26个字母,专门用来处理字符的。

class Trie{
  private:
  bool isEnd;
  Trie *next[26];

  public:
  Trie()
  {
    isEnd = false;
    memset(next,0,sizeof(next));
  }

  void insert(string word)
  {
    Trie *node = this;
    for(char c:word)
    {
      if(node->next[c-'a']==NULL)
      {
        node->next[c-'a'] = new Trie();
      }
      node = node->next[c-'a'];
    }
    node->isEnd = true;
  }

  bool search(string word)
  {
    Trie *node = this;
    for(char c:word)
    {
      node = node->next[c-'a'];
      if(node==NULL)
      {
        return false;
    }
  }
  return node->isEnd;
};

bool startsWith(string word)
{
  Trie *node = this;
  for(char c:word)
  {
    node = node->next[c-'a'];
    if(node == NULL)
    return false;
  }
  return true;
}
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值