Skip to content

문제 2 · 모든 연산이 O(N)인 이진 탐색 트리

문제 2 [2점]

0부터 9까지의 int형 원소 10개를 포함하며, 탐색(contains), 최소값 찾기(findMin), 최대값 찾기(findMax), 삽입(insert), 제거(remove)의 연산에서 전부 O(N)을 소모하는 이진 탐색 트리binary search tree 예시를 그리시오.

풀이 및 해설

이진 탐색 트리의 각 연산은 트리의 높이 h에 비례합니다. 균형이 잘 잡힌 트리라면 hlogN이지만, 한쪽으로만 자라난 **편향 트리(사향 트리)**는 h=N1이 되어 모든 연산이 O(N)이 됩니다.

이런 트리는 이미 정렬된 순서(예: 0, 1, 2, …, 9)로 삽입하면 만들어집니다. 각 원소가 항상 직전 원소의 오른쪽 자식이 되어, 연결 리스트와 똑같은 모양의 오른쪽 편향 트리가 됩니다.

0
 \
  1
   \
    2
     \
      3
       \

         \
          9

이 트리에서

  • findMin은 루트(0)이니 O(1)처럼 보이지만, findMax는 맨 아래 9까지 N1번 내려가야 하므로 O(N),
  • contains(9), insert, remove(9) 역시 잎까지 내려가므로 모두 O(N)입니다.
정렬 순서로 삽입한 오른쪽(또는 왼쪽) 편향 트리

즉, 높이가 원소 개수와 같아지는 편향 트리가 정답입니다. (9, 8, …, 0 순으로 삽입하면 왼쪽 편향 트리가 되며 결과는 동일합니다.)

PDF