码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode Implement Trie (Prefix Tree)

时间:2015-05-09 10:18:56      阅读:408      评论:0      收藏:0      [点我收藏+]

标签:前缀树   c   

题目
技术分享

思路
直接前缀树。

代码

struct TrieNode {
    char c;
    struct TrieNode * son[27];  // sons for "abcdefghijklmnopqrstuvwxyz\0"
};

struct TrieNode * trieCreate() {
    struct TrieNode * trieNode = (struct TrieNode*)malloc(sizeof(struct TrieNode));
    trieNode->c = ‘\0‘;
    memset(trieNode->son, 0, sizeof(trieNode->son));
    return trieNode;
}

void insert(struct TrieNode * root, char * word) {
    if (*word == ‘\0‘) {
        root->son[26] = trieCreate();
        root->son[26]->c = ‘\0‘;  // notice that ‘\0‘ is important. There‘s "abc\0" in Trie doesn‘t mean there‘s a word "ab\0".
        return;
    }
    if (root->son[*word - ‘a‘] == NULL) {
        root->son[*word - ‘a‘] = trieCreate();
        root->son[*word - ‘a‘]->c = *word;
        insert(root->son[*word - ‘a‘], word + 1);
    }
    else {
        insert(root->son[*word - ‘a‘], word + 1);
    }
}

bool search(struct TrieNode * root, char * word) {
    if (*word == ‘\0‘) {
        if (root->son[26] != NULL) return true;  // notice that ‘\0‘ is important. There‘s "abc\0" in Trie doesn‘t mean there‘s a word "ab\0".
        else return false;
    }
    if (root->son[*word - ‘a‘] == NULL) {
        return false;
    }
    else {
        return search(root->son[*word - ‘a‘], word + 1);
    }
}

bool startsWith(struct TrieNode * root, char * prefix) {
    if (*prefix == ‘\0‘) return true;  // but prefix is different. U didn‘t need a ‘\0‘ to make sure that it‘s an end of a word
    if (root->son[*prefix - ‘a‘] == NULL) {
        return false;
    }
    else {
        return startsWith(root->son[*prefix - ‘a‘], prefix + 1);
    }
}

void trieFree(struct TrieNode* root) {
    if (root != NULL) {
        for (int i = 0; i < 26; i++) {
            trieFree(root->son[i]);
        }
    }
}

LeetCode Implement Trie (Prefix Tree)

标签:前缀树   c   

原文地址:http://blog.csdn.net/u012925008/article/details/45598699

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!