트라이는 각 노드가 문자 하나를 나타내며, 루트 노드부터 시작하여 현재 노드에서 만들 수 있는 다음 문자들의 링크들을 가지고 있다. 이를 통해서 문자열을 검색할 때 노드들을 순회하며 검색을 수행한다.
주로 문자열 검색과 관련된 솔루션을 제공한다. 예를 들어 사전에서 단어를 검색하거나 자동 완성 기능에 사용할 수 있다.
Operation | Average | Worst case |
---|---|---|
Search | O(n) | O(n) |
Insert | O(n) | O(n) |
Delete | O(n) | O(n) |
class TrieNode {
val children = mutableMapOf<Char, TrieNode>()
var isEndOfWord = false
}
class Trie {
private val root = TrieNode()
fun insert(word: String) {
var current = root
for (char in word) {
val node = current.children.getOrPut(char) { TrieNode() }
current = node
}
current.isEndOfWord = true
}
fun search(word: String): Boolean {
var current = root
for (char in word) {
val node = current.children[char] ?: return false
current = node
}
return current.isEndOfWord
}
fun startsWith(prefix: String): Boolean {
var current = root
for (char in prefix) {
val node = current.children[char] ?: return false
current = node
}
return true
}
}