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까지를 순서대로 이진 탐색 트리에 넣으면?