A trie is a tree-like data structure that can store multiple strings. A node in a trie stores a character. After building a trie, strings or substrings can be retrieved by traversing down a path (a branch) of the trie. Tries are used to find substrings, autocomplete, and many other string operations. Trie map is a trie that uses a hash map in the trie node that used to access child nodes.

trie diagram

Why is a hash map used in a trie node?

In a trie, each trie node might have multiple branches. So a trie node has a data structure to store the references to the next nodes in the branches. The data structure can be an array, a linked list, or a hash map. When the data structure is a hash map, the character is the key to finding the corresponding node in the branch. Using a hash map is better than an array since it minimizes unnecessary memory space.


Table of Content


Map of trie implementations

Part 1 – trie implementation using an array
Part 2 – trie implementation using a linked list

you are here

Part 3 – trie implementation using a hash map


Define classes in trie implementation

Like building a tree, you need to define a TrieNode class before a Trie class. A TrieNode class has three variables: data, children, and isEnd. data stores a character. children is a data structure that stores the references to child nodes (branches). Here the data structure is a hash map. isEnd is to mark whether this is the last node in the branch.

In the Trie class, there is a variable root. The operation of insertion, search, or deletion always starts from root. The data of the root can be any character, which is not associated with any strings. Its children hold references to the first characters in strings.

Java

Javascript

Python


Insert a string in trie implementation

To insert a string, first check whether the string is in the trie so that you don’t insert a duplicate string. You start at root and loop through each character in the string. Create a new node “newNode” to store the character “ch”. Add the (ch, newNode) pair as an entry to the node’s children. Then move on to the next character and so on. When the node contains the last character of the string, you mark the node’s isEnd to be true.

Java

Javascript

Python

Doodle

trie insert array


Delete a string

To delete a string from a trie, first check whether the string exists in the trie. If not, the method can return. Otherwise, you start at root and loop through each character in the string. If the character is in the node’s children’s key set, move on to the child node. When the node has the last character of the string, mark the node’s isEnd to be false. The string is still in the trie, but unsearchable.

Java

Javascript

Python

To search for a string in a trie, start at root and loop through each character in the string. If the character is not in the node’s children’s key set, the method returns false. Otherwise, move on to the child node. When the node has the last character of the string, return the node’s isEnd value. If the value is false, it indicates the string has been deleted.

Java

Javascript

Python


Print all strings in a trie

To print all strings in a trie, recursion is used to traverse all nodes in the trie. This is similar to the preorder (depth-first search) traversal of a tree. When visiting the node, the method concatenates characters from previously visited nodes with the character of the current node. When the node’s isEnd is true, the recursion reaches the last character of the string. It indicates the completion of concatenating one string. You can go ahead to add the string to the result list.

Java

Javascript

Python


Free download

Download trie implementation using hashmap in Java, JavaScript and Python
Data structures introduction PDF