이진 탐색 트리란, 정렬된 이진트리로써 다음과 같은 속성을 갖고 있다.
👉 이를 통해 효율적인 검색이 가능하다!!
위의 트리에서 14라는 노드를 찾아보자!
루트 노드인 10과 비교했을 때, 14가 더 크므로 오른쪽 서브트리로 이동한다.
오른쪽 서브 트리의 루트 노드인 17과 비교했을 때 작으므로 왼쪽 서브트리로 이동한다.
14 발견!
위의 트리에 12라는 노드를 삽입해보자!
루트 노드인 10보다 크므로, 왼쪽 서브트리로 이동 → 서브트리의 노드인 17보다 작으므로 왼쪽 서브트리로 이동 → 서브트리의 노드인 14보다 작으므로 왼쪽에 배치!
삭제는 3가지 케이스로 나눌 수 있다고 한다.
지우려는 노드의 왼쪽 서브트리에서 가장 큰 값 or 오른쪽 서브트리에서 가장 작은 값으로 메꾼다.
👉 삭제되는 노드와 가장 값이 비슷한 노드를 정해야 다른 노드들을 이동시키지 않아도 트리가 유지된다.
n개의 노드를 갖는 BST 경우, 평균적인 시간 복잡도는 트리의 높이인 O(logn)
이다.
하지만 트리간 한 쪽으로 치우치는 최악의 경우에는 트리의 높이가 n이 되며, 시간 복잡도는 O(n)
이 된다.
이를 해결하고자, 트리의 균형을 유지하는 기법들이 많이 개발되었다.
👉 AVL 트리, 레드-블랙 트리, B-트리