컴퓨터알고리즘#12
LeeMir, 05 May 2021
탐색트리
이진탐색트리
- 내부노드에 (키, 원소) 쌍을 저장하며 다음의 성질을 만족하는 이진트리
- 왼쪽 서브트리 키 값이 기준 값보다 작으면서 오른쪽 서브트리 키 값이 기준 값보다 크거나 같음
- 보통 중복 키를 허용하지 않음
- 항상 왼쪽이 오른쪽보다는 먼저 탐색됨
- 이진탐색트리를 중위순회하면 키가 증가하는 순서(오름차순)로 방문
- 탐색
- 키 k를 찾기 위해 루트에서 출발하는 하향 경로를 추적
- 다음에 방문할 노드는 k와 현재 노드의 키 값을 비교한 결과에 따라 결정
- 외부 노드에 다다르면, 키 k가 발견되지 않은 것이므로
NoSuchKey를 반환
- 삽입
- 삽입할 키 k를 탐색(중복 유무 검사)
- k가 트리에 존재하지 않을 경우, 탐색은 외부 노드에 도착
- 외부 노드에 k를 삽입한 후 그 노드를 내부 노드로 확장(두 개의 외부 노드를 연결)
- 삭제
- 삭제할 키 k를 탐색
- k가 있는 노드에 도착
- 노드를 삭제하고나서는 빈 자리를 채워야하는데, 여러 경우 존재
- 자식 노드가 모두 외부 노드일 경우에는 그냥 삭제
- 자식 노드 중 하나는 외부 노드 하나는 내부 노드일 경우에는 내부 노드를 삭제하려는 노드의 부모와 연결
- 자식 노드가 모두 내부 노드일 경우에는 오른쪽 자식 노드에서 왼쪽으로 계속 타고 들어가 그 위치의 노드(중위 계승자)를 삭제하려는 노드의 자리에 위치
AVL 트리
- 트리의 모든 내부 노드 v에 대해 v의 자식들의 좌우 높이 차이가 1을 넘지 않는 이진탐색트리
- 높이 균형을 맞춘 트리(한 칸 차이까지 가능)
- AVL 트리의 서브트리 역시 AVL 트리
- 삽입 삭제는 이진탐색트리와 유사하거나 동일
- 삽입 삭제 결과 높이 균형 속성이 파괴될 수 있음
- 따라서 작업 후에는 혹시 생겼을지도 모를 불균형을 찾아서 수리해야 함