트리 · 이진트리 · BST · 힙 — 계층적 자료구조
DOM·파일시스템·React 재조정도 트리. BST는 정렬 + O(log n) 탐색, 힙은 우선순위 큐.
React DOM 재조정, DB B-Tree 인덱스(ch22-3), 디렉토리 구조, 조직도, JSON 자체 — 전부 트리다. 트리의 3가지 순회(전위·중위·후위)와 힙 우선순위 큐를 알면 AI 코드 이해도가 급상승.
트리는 루트(root)에서 시작해 자식(children)으로 가지치기하는 계층 구조. 사이클 없음. 용어: 루트·잎(leaf)·부모·자식·깊이(depth)·높이(height)·서브트리.
이진트리(Binary Tree)는 자식이 최대 2개. 이진탐색트리(BST, Binary Search Tree)는 "왼쪽은 더 작은 값, 오른쪽은 더 큰 값" 규칙이 추가 → 탐색·삽입·삭제 평균 O(log n). 단 편향되면 O(n)이 되므로 현대에는 자가 균형 트리(AVL·Red-Black·B-Tree)가 실무 표준.
// 이진트리 순회 3종 (재귀)
function traverse(node) {
if (!node) return;
// 전위(pre-order): 루트 → 좌 → 우 (복사·직렬화)
visit(node);
traverse(node.left);
traverse(node.right);
// 중위(in-order): 좌 → 루트 → 우 (BST면 정렬 순서)
// 후위(post-order): 좌 → 우 → 루트 (삭제·의존성 역순)
}
// 실전 용도
// - 전위: JSON 직렬화, 파일 복사
// - 중위: BST 정렬 순회, DB 인덱스 범위 조회
// - 후위: 폴더 삭제 (자식 먼저), 수식 후위표기법
// 레벨 순회(BFS) = 큐 사용 (ch17-4)"수식 계산기" · "디렉토리 삭제" 같은 문제를 풀 때 어느 순회가 맞는지 직관이 잡힌다.
힙(Heap)은 "가장 큰(또는 작은) 값을 빨리 꺼내기"에 최적화된 이진트리. 최대 힙은 부모 ≥ 자식, 최소 힙은 반대. push O(log n), peek/pop O(log n). 구현은 배열로(부모 i, 자식 2i+1, 2i+2).
| 연산 | 정렬된 배열 | 힙 |
|---|---|---|
| 최댓값 꺼내기 | O(1) 보기 / O(n) 유지 | O(log n) |
| 삽입 | O(n) | O(log n) |
| k번째 큰 값 | O(k log n) | O(n + k log n) |
| 쓰는 곳 | — | 우선순위 큐, top-k, Dijkstra |
Dijkstra 최단경로, A* 탐색, 작업 스케줄러, 실시간 top-k 랭킹 — 모두 힙이 핵심.
React 내부도 트리. Virtual DOM은 트리고, 재조정(Reconciliation)이 두 트리를 비교한다. DB B-Tree 인덱스(ch22-3)·파일시스템·JSON도 트리. 이 한 가지 자료구조가 바이브코더 주변 기술의 절반을 설명한다.
BST에서 정렬된 순서로 모든 노드를 방문하는 순회 방식은?
우선순위 큐의 전형적 내부 자료구조는?