티스토리 뷰
오늘 공부해볼 내용은 AVL 트리이다.
AVL 트리는 "균형잡힌" 이진 탐색 트리라고 할 수 있다.
트리에서 "균형잡혔다" 라는 의미는 오른쪽과 왼쪽의 서브 트리의 높이 차이가 1이하 인 경우이다.
따라서 새로운 노드를 삽입하거나, 노드를 삭제할 때 높이가 달라지는 부분에서 트리를 rotate 해야 한다.
아래는 그림으로 그려본 AVL트리의 예시이다.
지금 8에서 문제가 발생한다. 오른쪽은 깊이가 2인데 왼쪽은 0이다. 차이가 1을 초과하므로 회전 시켜줘야한다.
왼쪽으로 회전 시켜줘서 균형잡힌 트리를 만들 수 있다.
이번에도 8에서 문제가 발생한다. 왼쪽이 깊이가 2인데 오른쪽이 0이다. 차이가 1을 초과한다.
오른쪽으로 회전시켜 균형을 맞춰준다.
이번에는 조금 더 복잡한 경우이다. 회전을 여러번 해줘야한다.
먼저는 4에서 문제가 생긴다. 9 때문에 생기는 문제이다. 따라서 왼쪽 오른쪽 회전을 시켜야한다.
그렇지만 아직도 문제가 해결되지 않았다. 따라서 다시 왼쪽 회전을 시켜준다.
이렇게 해서 균형잡힌 트리를 만들 수 있다.
간단하게 AVL 트리를 설명해 보았다. 이후에는 코드로 개념을 설명해볼 것이다.
'알고리즘 이야기' 카테고리의 다른 글
[트리] 트리의 회전 - 이론 (0) | 2021.01.07 |
---|---|
[알고리즘 인사이트] 최대값, 최소값 탐색하기 (0) | 2020.09.02 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 프론트엔드
- 노마드코더
- 클린코드
- 노개북
- 네트워크
- DevOps
- 개발자북클럽
- 타입스크립트
- 대전
- python3.8
- 파이썬
- 프로그래머스
- 회고
- ssi-at
- 오픈소스
- 개발자밋업
- 코딩테스트
- 알고리즘
- IT대외활동
- SW마에스트로
- 합격
- 기계식 키보드
- boj
- 후기
- python
- 오픈소스기여
- devcon
- 개발자
- github
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
글 보관함