이진탐색트리(BST)란?
이진 트리의 한 종류로, 아래의 특징을 만족한다.
- 각 node는 뚜렷한 데이터 값을 갖는다.
- 더 작거나 또는 더 큰 값으로 key 값이 분류될 수 있다.
- 모든 node는 오른쪽 서브 트리보다 작고, 왼쪽 서브 트리보다 크다.
node 탐색하기
node를 탐색하는 방법은 간단하다.
- 현재 node가 target이 아니라면, 크기 비교를 한다.
- 작다면 왼쪽 서브 트리로, 크다면 오른쪽 서브 트리로 이동한다.
- 만약 해당 노드가 leaf노드라면 false를 반환한다.
- 위 과정을 반복하면서 target을 찾는다.
node 추가하기
node를 추가하는 방법도 쉽다.
탐색하는 방법과 유사하게 tree를 내려가면서 해당 값이 들어갈 자리를 찾아서 추가해주면 된다.
예를 들어 16이라는 값을 추가한다고 하면
- 45 vs 16을 비교 -> left 서브 트리로 이동
- 9 vs 16을 비교 -> right 서브 트리로 이동
- 17 vs 16을 비교 -> left 서브 트리로 이동
- 더이상 내려갈 곳이 없으니 17의 왼쪽 node로 16을 추가
node 삭제하기
삭제하는 방법은 3가지 경우를 고려해서 삭제한다.
- 자식 없는 leaf node의 경우
- 자식이 1개인 경우
- 자식이 2개인 경우
1. 자식이 없는 leaf node인 경우
부모가 가리키던 값을 null값으로 바꿔서 삭제하기
2. 자식이 1개인 경우
부모가 바로 그 자식과 연결되도록 바꾸기
3. 자식이 2개인 경우
오른쪽 서브 트리에서 가장 작은 값 또는 왼쪽 서브 트리에서 가장 큰 값을 골라 제거하고자 하는 대상의 자리로 복사
그 후 복사한 값이 원래 있던 자리의 node의 상태에 따라 1, 2의 방법으로 해당 자리의 node를 제거
728x90
반응형
'자료구조' 카테고리의 다른 글
[자료구조] Merge Sort, Heap Sort, Quick Sort (1) | 2025.06.06 |
---|---|
[자료구조] Selection Sort(선택정렬), Insersion Sort(삽입정렬) (0) | 2025.06.05 |
[자료구조] B-Tree & Set ADT (1) | 2025.06.02 |
[자료구조] Heap & Priority Queue ADT (1) | 2025.05.29 |
[자료구조] Binary Tree(이진트리) (0) | 2025.05.27 |