diff --git a/trie b/trie new file mode 100755 index 0000000..00ac829 Binary files /dev/null and b/trie differ diff --git a/trie.cpp b/trie.cpp new file mode 100644 index 0000000..19b107d --- /dev/null +++ b/trie.cpp @@ -0,0 +1,98 @@ +#include +#include +#include +using namespace std; + +class Trie { +private: + struct TrieNode { + unordered_map children; + bool isEndOfWord; + + TrieNode() : isEndOfWord(false) {} + }; + + TrieNode* root; + +public: + Trie() { + root = new TrieNode(); + } + + void insert(string word) { + TrieNode* current = root; + + for (char c : word) { + if (current->children.find(c) == current->children.end()) { + current->children[c] = new TrieNode(); + } + current = current->children[c]; + } + + current->isEndOfWord = true; + } + + bool search(string word) { + TrieNode* current = root; + + for (char c : word) { + if (current->children.find(c) == current->children.end()) { + return false; + } + current = current->children[c]; + } + + return current->isEndOfWord; + } + + bool startsWith(string prefix) { + TrieNode* current = root; + + for (char c : prefix) { + if (current->children.find(c) == current->children.end()) { + return false; + } + current = current->children[c]; + } + + return true; + } + + // Destructor to clean up memory + ~Trie() { + deleteTrie(root); + } + +private: + void deleteTrie(TrieNode* node) { + if (node == nullptr) return; + + for (auto& pair : node->children) { + deleteTrie(pair.second); + } + + delete node; + } +}; + +// Example usage and test cases +int main() { + Trie trie; + + // Test insert and search + trie.insert("apple"); + cout << "Search 'apple': " << (trie.search("apple") ? "true" : "false") << endl; + cout << "Search 'app': " << (trie.search("app") ? "true" : "false") << endl; + + // Test startsWith + cout << "StartsWith 'app': " << (trie.startsWith("app") ? "true" : "false") << endl; + + // Insert more words + trie.insert("app"); + trie.insert("application"); + + cout << "Search 'app' after insert: " << (trie.search("app") ? "true" : "false") << endl; + cout << "StartsWith 'appl': " << (trie.startsWith("appl") ? "true" : "false") << endl; + + return 0; +} \ No newline at end of file