문자열을 저장하고 효율적으로 탐색하기 위한 트리 형태의 자료구조
검색창의 문자 자동 완성 기능이 대표적인 사용 예이다.

이전 정점의 값 + 간선의 키를 값으로 가진다.class Node {
constructor(value = '') {
this.value = value;
this.children = new Map();
}
}
class Trie {
// 트라이 생성 시 빈 노드 생성
constructor() {
this.root = new Node();
}
// 문자열 추가
insert(string) {
let currentNode = this.root; // 루트로부터 시작
for (const char of string) {
// 간선에서 문자열을 가지고 있지 않으면 문자 추가
if (!currentNode.children.has(char)) {
currentNode.children.set(char, new Node(currentNode.value + char));
}
// 다음 정점으로 이동
currentNode = currentNode.children.get(char);
}
}
// 문자열 존재 체크 함수
has(string) {
let currentNode = this.root;
for (const char of string) {
if (!currentNode.children.has(char)) {
return false;
}
currentNode = currentNode.children.get(char);
}
return true;
}
}
const trie = new Trie();
trie.insert('cat');
trie.insert('can');
console.log(trie.has('cat')); // true
console.log(trie.has('can')); // true
console.log(trie.has('cap')); // false
자동 완성 코드를 구현해보자. 이전에 트리 파트에 사용된 레벨 순회를 응용할 수 있다.
😅 해당 내용은 공부하면서 정리한 글입니다. 틀린 부분이나 오해하고 있는 부분이 있다면 피드백 부탁드립니다.