Dataslope logoDataslope

Tries

Learn prefix trees, trie operations, memory trade-offs, and prefix-query challenges in C++

A trie, or prefix tree, stores strings by sharing common prefixes. Each node represents a prefix. Edges represent characters, and a boolean flag marks whether the prefix is a complete word.

Trie shape

This trie contains cat, car, cart, and dog.

Compared with std::unordered_set<std::string>, a trie often uses more memory because every node stores child links. In exchange, prefix queries are fast and natural.

Length-based complexity

Trie insert, exact search, and prefix search are O(L), where L is the length of the key, independent of how many other words are stored.

Node representation

For lowercase English letters, std::array<TrieNode*, 26> is compact and fast. For arbitrary characters, std::unordered_map<char, TrieNode*> is flexible.

Code Block
C++ 20 (202002L)

Full implementation with unordered_map

This version is easy to read and works for any character.

Code Block
C++ 20 (202002L)

Insert

Insertion creates missing nodes along the word path, then marks the final node as a complete word.

Code Block
C++ 20 (202002L)

Exact search requires the final node to have isWord = true. Prefix search only needs the path to exist.

Code Block
C++ 20 (202002L)

Autocomplete by DFS

Once you walk to a prefix node, collect all words below that node.

Code Block
C++ 20 (202002L)

Use cases

Tries are useful for autocomplete, spellcheck, IP routing, longest-prefix matching, and dictionary-word search on a board.

Code Block
C++ 20 (202002L)

Practice: Implement a Trie

Challenge
C++ 20 (202002L)
Implement a Trie

Complete the Trie class with insert, search, and startsWith.

Practice: Count words starting with prefix

Challenge
C++ 20 (202002L)
Count words starting with prefix

Build a trie from the words and return how many inserted words start with the given prefix.

Practice: Longest common prefix

Challenge
C++ 20 (202002L)
Longest common prefix

Build a trie and walk while there is exactly one child and the current node is not the end of a word.

Check your understanding

QuestionSelect one

What is the time complexity of searching for a word of length L in a trie?

O(1) always

O(L)

O(n log n)

O(26 to the power L)

QuestionSelect one

When can a trie beat a hash set of strings?

When many prefix queries such as starts-with or autocomplete are needed.

When memory must always be minimized.

When only exact membership is needed and no prefixes matter.

When strings cannot share prefixes.

QuestionSelect one

What does a node in a trie represent?

A whole independent hash table of all words

A prefix formed by the path from the root to that node

Always exactly one complete word

The sorted rank of a string

On this page