Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
2.2 kB
1
Indexable
Never
/*
    Your Trie object will be instantiated and called as such:
    Trie* obj = new Trie();
    obj->insert(word);
    bool check2 = obj->search(word);
    bool check3 = obj->startsWith(prefix);
 */

class trienode{
    public:
    char data;
    trienode* children[26]; // an array of trienodes
    bool isterminal;
    trienode(char ch){
        data=ch;
        for(int i=0;i<26;i++){
            children[i]=NULL;
        }
        isterminal=false;
    }
};


class Trie {

public:
    trienode* root;
    /** Initialize your data structure here. */
    Trie() {
        root= new trienode('\0');
    }

    /** Inserts a word into the trie. */
    void insertdriver(trienode* root, string str)
    {
        if(str.length()==0){  //base case
            root->isterminal=true;
            return;
        }
        trienode* child;
        int index=str[0]-'a';

        if(root->children[index]!=NULL){ // this character already exists in the children of root .. proceed
            child=root->children[index];
        }else{
            child =new trienode(str[0]);  // this character isnt present in children of root. create it and then 
            root->children[index]=child;  // proceed
        }
        insertdriver(child,str.substr(1)); //recursion
    }   
    void insert(string word) {
        insertdriver(root,word);
    }

    /** Returns if the word is in the trie. */
    bool searchdriver(trienode* root,string str){
        if(str.length()==0) return root->isterminal;
        
        int index=str[0]-'a';
        if(root->children[index]==NULL) return false;
        return searchdriver(root->children[index],str.substr(1));
    }
    bool search(string word) {
        return searchdriver(root,word);
    }

    /** Returns if there is any word in the trie that starts with the given prefix. */
    bool presdriver(trienode* root,string str){
        if(str.length()==0) return true;
        
        int index=str[0]-'a';
        if(root->children[index]==NULL) return false;
        return presdriver(root->children[index],str.substr(1));
    }
    bool startsWith(string prefix) {
        return presdriver(root,prefix);
    }
};