최대 1 분 소요

https://www.geeksforgeeks.org/trie-insert-and-search/

source code - C

// C implementation of search and insert operations 
// on Trie 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <stdbool.h> 
 
#define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0]) 
 
// Alphabet size (# of symbols) 
#define ALPHABET_SIZE (26) 
 
// Converts key current character into index 
// use only 'a' through 'z' and lower case 
#define CHAR_TO_INDEX(c) ((int)c - (int)'a') 
 
// trie node 
struct TrieNode 
{ 
    struct TrieNode *children[ALPHABET_SIZE]; 
 
    // isEndOfWord is true if the node represents 
    // end of a word 
    bool isEndOfWord; 
}; 
 
// Returns new trie node (initialized to NULLs) 
struct TrieNode *getNode(void) 
{ 
    struct TrieNode *pNode = NULL; 
 
    pNode = (struct TrieNode *)malloc(sizeof(struct TrieNode)); 
 
    if (pNode) 
    { 
        int i; 
 
        pNode->isEndOfWord = false; 
 
        for (i = 0; i < ALPHABET_SIZE; i++) 
            pNode->children[i] = NULL; 
    } 
 
    return pNode; 
} 
 
// If not present, inserts key into trie 
// If the key is prefix of trie node, just marks leaf node 
void insert(struct TrieNode *root, const char *key) 
{ 
    int level; 
    int length = strlen(key); 
    int index; 
 
    struct TrieNode *pCrawl = root; 
 
    for (level = 0; level < length; level++) 
    { 
        index = CHAR_TO_INDEX(key[level]); 
        if (!pCrawl->children[index]) 
            pCrawl->children[index] = getNode(); 
 
        pCrawl = pCrawl->children[index]; 
    } 
 
    // mark last node as leaf 
    pCrawl->isEndOfWord = true; 
} 
 
// Returns true if key presents in trie, else false 
bool search(struct TrieNode *root, const char *key) 
{ 
    int level; 
    int length = strlen(key); 
    int index; 
    struct TrieNode *pCrawl = root; 
 
    for (level = 0; level < length; level++) 
    { 
        index = CHAR_TO_INDEX(key[level]); 
 
        if (!pCrawl->children[index]) 
            return false; 
 
        pCrawl = pCrawl->children[index]; 
    } 
 
    return (pCrawl != NULL && pCrawl->isEndOfWord); 
} 
 
// Driver 
int main() 
{ 
    // Input keys (use only 'a' through 'z' and lower case) 
    char keys[][8] = {"the", "a", "there", "answer", "any", 
                    "by", "bye", "their"}; 
 
    char output[][32] = {"Not present in trie", "Present in trie"}; 
 
 
    struct TrieNode *root = getNode(); 
 
    // Construct trie 
    int i; 
    for (i = 0; i < ARRAY_SIZE(keys); i++) 
        insert(root, keys[i]); 
 
    // Search for different keys 
    printf("%s --- %s\n", "the", output[search(root, "the")] ); 
    printf("%s --- %s\n", "these", output[search(root, "these")] ); 
    printf("%s --- %s\n", "their", output[search(root, "their")] ); 
    printf("%s --- %s\n", "thaw", output[search(root, "thaw")] ); 
 
    return 0; 
} 
 

그리고 정리가 잘되어 있는 분이 있어서 참고 용으로 적어 둡니다. ^^;

https://ingyeoking13.tistory.com/193

https://github.com/ingyeoking13/algorithm/blob/master/tistory/tree/trie.c

https://ingyeoking13.tistory.com/240

\