Implementation problem.

class TrieNode {
public:
    // Initialize your data structure here.
    TrieNode() {
        c = 0;
        bIsLast = false;
    }
    TrieNode(char vc) {
        c = vc;
        bIsLast = false;
    }
public:
    char c;
    bool bIsLast;
    map<char, TrieNode> childMap;
};

class Trie {
public:
    Trie() 
    {
        root = new TrieNode();
    }
    
    ~Trie()
    {
        if (root)
            delete root;
    }
    
    // Inserts a word into the trie.
    void insert(string s) {
        TrieNode *r = root;
        for (int i = 0; i < s.length(); i++)
        {
            if (r->childMap.find(s[i]) == r->childMap.end())
            {
                r->childMap.insert(make_pair(s[i], TrieNode(s[i])));
            }
            
            r = &(r->childMap[s[i]]);            
        }
        r->bIsLast = true;
    }

    // Returns if the word is in the trie.
    bool search(string key) {
        TrieNode *r = root;
        for (int i = 0; i < key.length(); i++)
        {
            if (r->childMap.find(key[i]) == r->childMap.end())
            {
                return false;
            }

            r = &(r->childMap[key[i]]);
        }

        return r->bIsLast;
    }

    // Returns if there is any word in the trie
    // that starts with the given prefix.
    bool startsWith(string prefix) {
        TrieNode *r = root;
        for (int i = 0; i < prefix.length(); i++)
        {
            if (r->childMap.find(prefix[i]) == r->childMap.end())
            {
                return false;
            }

            r = &(r->childMap[prefix[i]]);
        }
        return true;
    }

private:
    TrieNode* root;
};