diff --git a/Data Structures/Trie/Trie.java b/Data Structures/Trie/Trie.java new file mode 100644 index 0000000..960c5f7 --- /dev/null +++ b/Data Structures/Trie/Trie.java @@ -0,0 +1,70 @@ +public class Trie { + + // Alphabet size (# of symbols) + static final int ALPHABET_SIZE = 26; + + // trie node + static class TrieNode + { + TrieNode[] children = new TrieNode[ALPHABET_SIZE]; + + // isEndOfWord is true if the node represents + // end of a word + boolean isEndOfWord; + + TrieNode(){ + isEndOfWord = false; + for (int i = 0; i < ALPHABET_SIZE; i++) + children[i] = null; + } + }; + + static TrieNode root; + + // If not present, inserts key into trie + // If the key is prefix of trie node, + // just marks leaf node + static void insert(String key) + { + int level; + int index; + int length = key.length(); + + TrieNode pCrawl = root; + + for (level = 0; level < length; level++) + { + index = key.charAt(level) - 'a'; + if (pCrawl.children[index] == null) + pCrawl.children[index] = new TrieNode(); + + pCrawl = pCrawl.children[index]; + } + + // mark last node as leaf + pCrawl.isEndOfWord = true; + } + + // Returns true if key presents in trie, else false + static boolean search(String key) + { + int level; + int index; + int length = key.length(); + + TrieNode pCrawl = root; + + for (level = 0; level < length; level++) + { + index = key.charAt(level) - 'a'; + + if (pCrawl.children[index] == null) + return false; + + pCrawl = pCrawl.children[index]; + } + + return (pCrawl.isEndOfWord); + } + +} \ No newline at end of file