11강 / 20강
이진 탐색 트리 — 반씩 접어 가며 찾는 나무
규칙 하나를 더했을 뿐인데 검색이 폭발적으로 빨라진다
10강의 이진 트리에 규칙 하나를 더해 봅시다.
이진 탐색 트리의 규칙
모든 노드에 대해 — 왼쪽 가지의 모든 값 < 나 < 오른쪽 가지의 모든 값
이 규칙 덕분에 값을 찾을 때 비교 한 번에 절반을 버릴 수 있습니다. 찾는 값이 나보다 작으면? 오른쪽은 볼 필요조차 없어요.
1000개 중에서 찾는다면 리스트는 최악의 경우 1000번 비교하지만, 잘 만든 이진 탐색 트리는 약 10번이면 끝납니다. (1000 → 500 → 250 → … → 1, 즉 2를 열 번 곱하면 1024니까요.)
이진 탐색 트리를 중위 순회하면 저절로 오름차순이 됩니다.
Python
브라우저에서 실행
🎮 이진 탐색 트리 실험실
값을 넣어 트리를 키우고, 찾기를 눌러 어느 길로 내려가는지 보세요. 그리고 1, 2, 3, 4, 5를 순서대로 넣어 보세요. 무슨 일이 벌어지나요?
비교할 때마다 나머지 절반이 통째로 사라집니다.
Python
브라우저에서 실행
같은 값 127개, 넣는 순서만 다릅니다. 높이를 비교해 보세요.
Python
브라우저에서 실행
정리 — 자료구조 세 개의 검색 비교
| 자료구조 | 검색 | 삽입 | 정렬된 순서로 꺼내기 |
|---|---|---|---|
| 리스트 (정렬 안 됨) | 🐢 하나씩 다 본다 | ⚡ 맨 뒤에 붙이기 | 🐢 매번 정렬해야 |
| 정렬된 리스트 | ⚡ 이진 탐색 (16강) | 🐢 자리를 만들려면 밀어내기 | ⚡ 그냥 순서대로 |
| 이진 탐색 트리 | ⚡ 절반씩 버리기 | ⚡ 내려가서 붙이기 | ⚡ 중위 순회 |
| 해시 테이블 (13강) | ⚡⚡ 즉시 | ⚡⚡ 즉시 | ❌ 순서 없음 |
완벽한 자료구조는 없습니다. 무엇을 자주 하느냐가 선택을 결정합니다 — 20강의 주제입니다.
🤔 확인 문제
이진 탐색 트리의 규칙은?
해설 바로 아래 자식만이 아니라 가지 전체가 조건을 만족해야 합니다. 그래야 "작으면 오른쪽은 통째로 버려도 된다"가 성립해요.
🤔 확인 문제
이진 탐색 트리를 중위 순회하면 값이 어떤 순서로 나올까요?
해설 왼쪽(작은 값) → 나 → 오른쪽(큰 값) 순서니까 오름차순입니다. 값을 넣기만 해도 정렬이 따라오는 셈이에요.
🤔 확인 문제
1부터 1000까지를 순서대로 이진 탐색 트리에 넣으면?
해설 매번 "나보다 크다"라서 오른쪽으로만 붙습니다. 높이 1000짜리 외줄이 되고, 검색은 하나씩 다 보는 것과 같아집니다. 실무에서 균형 트리를 쓰는 이유예요.