- 이진 탐색 트리 = 이진탐색 + 연결리스트
- 두 가지의 장점을 합쳐서 만든 것
- 이진탐색 시 O(logN), 삽입/삭제 불가능
- 연결리스트 삽입/삭제 시 O(1), 탐색 시 O(N)
- 각 노드의 자식이 2개 이하
- 왼쪽은 부모보다 작고, 오른쪽은 부모보다 큼
- 중복된 노드 X (검색 목적이므로 중복 존재로 느리게 만들 필요 X, 트리 삽입보다 노드가 count를 가지게 하는 것이 효율적)
순회
in-order 중위순회 방식으로 읽을 때 정렬된 순서대로 읽을 수 있음
연산
검색, 삽입, 삭제, 트리 생성, 트리 삭제
시간복잡도
- 균등 트리 : 노드 개수 N, O(logN)
- 편향 트리 : 노드 개수 N, O(N)
(편향 트리를 바로잡도록 도와주는 개선된 tree가 AVL, RedBlack Tree)
삽입
- Root 에서 시작
- 작으면 왼쪽, 크면 오른쪽으로 leaf 노드에 도달할 때까지 이동
- 노드보다 작으면 왼쪽, 크면 오른쪽에 삽입
삭제
- 자식 X leaf 노드 : 그냥 삭제
- 자식 1 leaf 노드 : 지워진 노드에 자식 올리기
- 자식 2 leaf 노드 : 오른쪽 자식 노드에서 가장 작은 값 or 왼쪽 자식 노드에서 가장 큰 값
References
https://github.com/gyoogle/tech-interview-for-developer
GitHub - gyoogle/tech-interview-for-developer: 👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖
👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.
github.com
https://ratsgo.github.io/data%20structure&algorithm/2017/10/22/bst/
이진탐색트리(Binary Search Tree) · ratsgo's blog
이번 글에서는 자료구조의 일종인 이진탐색트리(Binary Search Tree)에 대해 살펴보도록 하겠습니다. 이 글은 고려대 김선욱 교수님, 그리고 역시 같은 대학의 김황남 교수님 강의와 위키피디아를 정
ratsgo.github.io
728x90
반응형