leetcode:Trie:Implement Trie (Prefix Tree)(208)

原创 2016年08月31日 15:01:46

Implement a trie with insert, search, and startsWith methods.


class TrieNode {  
public:  
    char var;  
    bool isWord;  
    TrieNode* children[26];  
    // Initialize your data structure here.  
    TrieNode() {  
        var = 0;  
        isWord = false;  
        memset(children, 0x0, sizeof(TreeNode*)*26);  

    }  
    TrieNode(char c){  
        var = c;  
        isWord = false;  
        memset(children, 0x0, sizeof(TreeNode*)*26);  
    }  
};  
class Trie {  
public:  
    Trie() {  
        root = new TrieNode();  
    }  

    // Inserts a word into the trie.  
    void insert(string word) {  
        TrieNode* pNode = root;  
        if (word.length() <= 0)  
        {  
            return;  
        }  
        for (int i= 0; i<word.length(); i++)  
        {  
            char c= word[i];  
            if (pNode->children[c-'a'] == 0)  
            {  
                TrieNode *pNew = new TrieNode(c);  
                pNode->children[c-'a'] = pNew;  
            }  
            pNode = pNode->children[c-'a'];  
        }  
        pNode->isWord = true;  
    }  

    // Returns if the word is in the trie.  
    bool search(string word) {  
        TrieNode *pNode = root;  
        if (word.length() <= 0)  
            return true;  
        for (int i =0; i<word.length(); i++)  
        {  
            char c = word[i];  
            pNode = pNode->children[c-'a'];  
            if (pNode == NULL)  
                return false;  
        }  
        return pNode->isWord;  
    }  

    // Returns if there is any word in the trie  
    // that starts with the given prefix.  
    bool startsWith(string prefix) {  
        TrieNode *pNode = root;  
        if (prefix.length()<=0)  
            return true;  
        for (int i=0; i<prefix.length(); i++)  
        {  
            char c = prefix[i];  
            pNode = pNode->children[c-'a'];  
            if (pNode == NULL)  
                return false;  
        }  
        return true;  
    }  
    void freeTrieNode(TrieNode* pNode){  
        if (pNode == NULL)  
            return;  
        for (int i=0; i<26;i++)  
        {  
            TrieNode* pChild = pNode->children[i];  
            if (pChild != NULL)  
            {  
                freeTrieNode(pChild);  
            }  
        }  
        free(pNode);  
    }  
    ~Trie(){  
        freeTrieNode(root);  
    }  
private:  
    TrieNode* root;  
};  
版权声明:本文为博主原创文章,未经博主允许不得转载。

Trie树(Prefix Tree)介绍

本文用尽量简洁的语言介绍一种树形数据结构 —— Trie树。一、什么是Trie树Trie树,又叫字典树、前缀树(Prefix Tree)、单词查找树 或 键树,是一种多叉树结构。如下图: 上图是...
  • lisong694767315
  • lisong694767315
  • 2015年05月09日 01:49
  • 7772

支持中文的基于词为基本粒度的前缀树(prefix trie)python实现

Trie树,也叫字典树、前缀树。可用于”predictive text”和”autocompletion”,亦可用于统计词频(边插入Trie树边更新或添加词频)。 在计算机科学中,trie,又称前缀...
  • yangxudong
  • yangxudong
  • 2014年10月28日 13:35
  • 1968

Trie Tree简单实现

最近突然有兴致hiho一下了,实现了下trie tree,感觉而言,还是挺有意思的,个人觉得这货不光可以用来查单词吧,其实也可以用来替代Hash,反正查找,插入复杂度都挺低的,哈哈,啥都不懂,瞎扯.....
  • HURUI123456789
  • HURUI123456789
  • 2016年08月17日 20:17
  • 222

【算法】Trie数(前缀树/字典树)简介及Leetcode上关于前缀树的题

前几天同学面今日头条被问到了Trie树,刚好我也对于Trie树这种数据结构不是很熟悉,所以研究了一下前缀树,然后把Leetcode上关于前缀树的题都给做了一遍。 Leetcode上关于前缀树的题有如下...
  • haolexiao
  • haolexiao
  • 2017年04月04日 22:29
  • 806

Trie原理、扩展及Python实现

关于Trie树的原理这里不做介绍,网上相关的资料非常多,可以参考July的文章:http://blog.csdn.net/v_july_v/article/details/6897097。不过Trie...
  • lewsn2008
  • lewsn2008
  • 2013年08月06日 20:01
  • 4316

Trie图 & AC自动机初学(1)

题目来源于:Hihocoder 时间限制:20000ms 单点时限:1000ms 内存限制:512MB 描述 前情回顾 上回说到,小Hi和小Ho接受到了河蟹...
  • qq_32036091
  • qq_32036091
  • 2016年05月08日 10:13
  • 1133

Trie树进阶:Double-Array Trie原理及状态转移过程详解

Trie树本身就是一个很迷人的数据结构,何况是其改进的方案。在本博客中我会从DAT(Double-Array Tire)的原理开始,并结合其源代码对DAT的状态转移过程进行解析。如果因此你能从我的博客...
  • u013761665
  • u013761665
  • 2015年10月22日 15:54
  • 8445

trie图的构建------易理解版

当然看这篇文章最好在看trie图那篇原文看不懂的情况下再看这篇 这篇只是便于理解肯定有很多不严谨的地方 看trie图看了一个小时终于看明白了,冯涛原创,我在网上就看到有一篇讲解trie图的看的好费...
  • u012329934
  • u012329934
  • 2014年07月26日 22:32
  • 1122

字典树/trie树,基数树/radix树

转自:百度百科:http://baike.baidu.com/view/2759664.htm
  • taozhi20084525
  • taozhi20084525
  • 2014年07月21日 15:32
  • 1635

java实现的Trie树数据结构

最近在学习的时候,经常看到使用Trie树数据结构来解决问题,比如“ 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。” 该如何解决...
  • abcd_d_
  • abcd_d_
  • 2014年10月15日 20:37
  • 5707
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:leetcode:Trie:Implement Trie (Prefix Tree)(208)
举报原因:
原因补充:

(最多只允许输入30个字)