SlideShare a Scribd company logo
By POSTECH Computer Algorithm Team
이진 검색 트리
조승혁
Binary Search Tree
Contents
POSTECH Computer Algorithm Team
트립 2
이진 검색 트리 1
POSTECH Computer Algorithm Team
Concept
- 선형 자료 구조의 경우, 입력이 되는 순서에 따라 데이터들의 순서가 결정된다.
- 하지만 저번 시간에 배운 트리의 경우, 우리가 원하는 순서대로 데이터들을 정리할 수 있다.
- 즉, 우선순위(priority)를 결정할 수 있다.
- 그 중에서 가장 대표적인 것이 이진 검색 트리이다.
이진 검색 트리
POSTECH Computer Algorithm Team
Concept
이진 검색 트리는 다음과 같은 조건으로 유지된다.
1. 각 노드의 자식 노드는 최대 2개이다.
2. 각 노드는 왼쪽 자식이 부모 노드보다 작고, 오른쪽 자식이 부모 노드보다 크다.
Q) 데이터들이 이진 검색 트리로 저장되어 있을 때, k번째로 큰 노드를 찾아보자.
이진 검색 트리
POSTECH Computer Algorithm Team
Concept
- 이진 검색 트리의 시간복잡도는 트리의 높이가 된다.
- 한 번 검색을 할 때 level이 무조건 1씩 증가하므로 최악의 경우는 트리의 맨 끝까지 갔을 때이다. O(h)
Q) 최선, 최악의 경우 시간복잡도는 어떻게 될까?
이진 검색 트리
POSTECH Computer Algorithm Team
Concept
- 이제 이진 검색 트리의 삽입과 삭제를 살펴보자.
- 삽입은 기본적인 탐색을 하며 현재 노드보다 작으면 왼쪽 서브 트리로, 크면 오른쪽 서브 트리로 탐색 과정을 재
귀적으로 실행한다.
- 만약 리프 노드를 찾게 되면 이진 검색 트리의 조건에 맞춰 왼쪽 또는 오른쪽 노드로 삽입하면 된다.
- 삭제는 이렇게 쉽게 되지 않는다. 왜냐하면 삭제를 하게 되면 연결이 끊어지게 되기 때문이다.
Q) 삭제는 어떤 서브 트리의 루트 노드가 사라지는 것으로 생각할 수 있다. 이런 경우 루트 노드의 왼쪽 서브 트리
와 오른쪽 서브 트리를 어떻게 재정렬할 수 있을까?
이진 검색 트리
POSTECH Computer Algorithm Team
Concept
- 앞에서 말했듯이 이진 검색 트리의 탐색은 최악의 경우 O(n)이 되기 때문에 일반적인 검색과 다를 바가 없다.
- 그래서 항상 최선의 경우인 O(logn)이 되도록 만들어야 한다.
- 이에 대한 알고리즘들을 ‘균형 잡힌 이진 트리’라고 한다.
- 기본 적인 균형 잡힌 이진 트리의 조건은 어떤 노드의 두 자식 서브 트리의 높이 차가 1이하여야한다는 것이다.
균형 잡힌 이진 트리
POSTECH Computer Algorithm Team
Concept
- 일반적으로 STL의 set, map 같은 경우 red-black tree나 AVL tree라는 알고리즘들을 이용하여 균형 잡혀져 있다.
- 하지만 이런 알고리즘들은 구현이 까다롭다.
- 그리고 k번째 수 찾기 등을 O(logn)에 지원하지 않기 때문에 평균적으로 균형 잡힌 이진 트리를 만드는 ‘트립
(treap)’을 사용한다.
균형 잡힌 이진 트리
POSTECH Computer Algorithm Team
Concept
- 트립의 기본 조건은 이진 검색 트리와 힙(heap)을 합쳐 놓은 듯한 모양새다.
1. 현재 노드의 왼쪽 자식 노드는 부모 노드보다 작고, 오른쪽 자식 노드는 부모 노드보다 크다.
2. 자식 노드들의 우선순위보다 부모 노드의 우선순위가 높아야 한다.
- 이진 검색 트리와는 다르게 우선순위라는 개념이 추가된다.
Q) 우선순위는 어떻게 매겨야 균형 잡힌 이진 트리가 만들어질까?
트립
POSTECH Computer Algorithm Team
Concept
A) 노드를 하나 씩 넣을 때, 랜덤하게 우선 순위를 정해준다. 이러면 트리의 높이의 기댓값이 O(logn)이 되어 우리
가 원하는 형태로 만들어진다.
- 삽입은 크게 두 가지 상황을 생각해야 된다. 현재 삽입하는 노드의 우선순위가 현재 노드보다 클 때랑 작을 때이
다.
- 만약 현재 노드보다 우선순위가 작으면 자식들 중 크기가 작은 자식 노드를 루트로 하는 서브 트리에서 이 과정
을 재귀적으로 반복한다.
- 하지만 우선순위가 크면 이 노드를 삽입하는 노드의 자식으로 넣어야 하는데, 그냥 넣으면 높이가 1 증가하여 균
형이 깨진다.
트립
POSTECH Computer Algorithm Team
Concept
- 만약 루트 노드가 삽입 노드보다 작으면 왼쪽 서브 트리 + 루트 노드 / 오른쪽 서브 트리로 쪼개면 되고 반대의
경우, 왼쪽 서브 트리 / 루트 노드 + 오른쪽 서브 트리로 쪼갠다.
- 이들을 삽입 노드의 자식으로 두면 새로 생성된 트리의 왼쪽 서브 트리와 오른쪽 서브 트리의 높이 차가 1로 유
지되어 균형은 맞춰지게 된다.
- 삭제는 이진 검색 트리의 삭제와 거의 동일하다. 우선순위에 따라 루트를 왼쪽 자식 노드로 할지 오른쪽 자식 노
드로 할지 결정하면 된다.
트립
Code Explanation
POSTECH Computer Algorithm Team
Code
Code Explanation
struct Node {
int key;
int priority, size;
Node *left, *right;
Node(const int _key): key(_key), priority(rand() %
50000), size(1), left(NULL), right(NULL) { }
void setLeft(Node* _left) {
left = _left;
calcSize();
}
https://github.com/shhj1998/Problem-Solving/blob/6a914f7fecbfced5d9c325e7a7fdedac5ff1b93f/Algospot/INSERTION.cpp
트립 구현
void setRight(Node* _right) {
right = _right;
calcSize();
}
void calcSize() {
size = 1;
size += (left ? left->size : 0);
size += (right ? right->size : 0);
}
};
POSTECH Computer Algorithm Team
More
- https://algospot.com/judge/problem/read/NERD2
- https://algospot.com/judge/problem/read/INSERTION

More Related Content

PPTX
Binary search tree
PPTX
02. data structure and stl
PPTX
04. binary search
PPTX
Data structure review (summer study)
PPTX
6. Sorting
PPTX
Quick sort
PPTX
06. sorting
PPTX
코딩테스트 합격자 되기 C++ 13장 정렬(sorting)에 대한 강의 자료 입니다.
Binary search tree
02. data structure and stl
04. binary search
Data structure review (summer study)
6. Sorting
Quick sort
06. sorting
코딩테스트 합격자 되기 C++ 13장 정렬(sorting)에 대한 강의 자료 입니다.

Similar to 02. binary search tree (12)

PDF
2012 Ds 02
PDF
Semina tree
PDF
알고리즘 스터디(정렬) Seungdols
PDF
Heavy light decomposition
PDF
[Swift] Data Structure - Heap
PDF
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
PPTX
03. segment tree
PDF
Algorithms summary korean
PPTX
[데브루키]노대영_알고리즘 스터디
PDF
CS Study - Data Structure 자료 구조. Tree 발표자료
PDF
[Algorithm] Selection Sort
PPTX
알고리즘 스터디 탐색
2012 Ds 02
Semina tree
알고리즘 스터디(정렬) Seungdols
Heavy light decomposition
[Swift] Data Structure - Heap
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
03. segment tree
Algorithms summary korean
[데브루키]노대영_알고리즘 스터디
CS Study - Data Structure 자료 구조. Tree 발표자료
[Algorithm] Selection Sort
알고리즘 스터디 탐색
Ad

More from 승혁 조 (20)

PDF
RSS Live Slider
PDF
Parallel binary search
PDF
Geometry Algorithms
PDF
PDF
Advanced segment tree
PDF
L-R network flow
PDF
PDF
Sqrt(n) algorithm
PDF
DP Optimization
PPTX
NIM game
PPTX
DP 중급 2
PPTX
분할정복
PPTX
String algorithm
PPTX
2019 ppc answers
PPTX
Tree algorithm
PDF
Number theory
PPTX
05. network flow 2
PPTX
05 divide and conquer
PPTX
04. network flow 1
PPTX
03. dp easy
RSS Live Slider
Parallel binary search
Geometry Algorithms
Advanced segment tree
L-R network flow
Sqrt(n) algorithm
DP Optimization
NIM game
DP 중급 2
분할정복
String algorithm
2019 ppc answers
Tree algorithm
Number theory
05. network flow 2
05 divide and conquer
04. network flow 1
03. dp easy
Ad

02. binary search tree

  • 1. By POSTECH Computer Algorithm Team 이진 검색 트리 조승혁 Binary Search Tree
  • 2. Contents POSTECH Computer Algorithm Team 트립 2 이진 검색 트리 1
  • 3. POSTECH Computer Algorithm Team Concept - 선형 자료 구조의 경우, 입력이 되는 순서에 따라 데이터들의 순서가 결정된다. - 하지만 저번 시간에 배운 트리의 경우, 우리가 원하는 순서대로 데이터들을 정리할 수 있다. - 즉, 우선순위(priority)를 결정할 수 있다. - 그 중에서 가장 대표적인 것이 이진 검색 트리이다. 이진 검색 트리
  • 4. POSTECH Computer Algorithm Team Concept 이진 검색 트리는 다음과 같은 조건으로 유지된다. 1. 각 노드의 자식 노드는 최대 2개이다. 2. 각 노드는 왼쪽 자식이 부모 노드보다 작고, 오른쪽 자식이 부모 노드보다 크다. Q) 데이터들이 이진 검색 트리로 저장되어 있을 때, k번째로 큰 노드를 찾아보자. 이진 검색 트리
  • 5. POSTECH Computer Algorithm Team Concept - 이진 검색 트리의 시간복잡도는 트리의 높이가 된다. - 한 번 검색을 할 때 level이 무조건 1씩 증가하므로 최악의 경우는 트리의 맨 끝까지 갔을 때이다. O(h) Q) 최선, 최악의 경우 시간복잡도는 어떻게 될까? 이진 검색 트리
  • 6. POSTECH Computer Algorithm Team Concept - 이제 이진 검색 트리의 삽입과 삭제를 살펴보자. - 삽입은 기본적인 탐색을 하며 현재 노드보다 작으면 왼쪽 서브 트리로, 크면 오른쪽 서브 트리로 탐색 과정을 재 귀적으로 실행한다. - 만약 리프 노드를 찾게 되면 이진 검색 트리의 조건에 맞춰 왼쪽 또는 오른쪽 노드로 삽입하면 된다. - 삭제는 이렇게 쉽게 되지 않는다. 왜냐하면 삭제를 하게 되면 연결이 끊어지게 되기 때문이다. Q) 삭제는 어떤 서브 트리의 루트 노드가 사라지는 것으로 생각할 수 있다. 이런 경우 루트 노드의 왼쪽 서브 트리 와 오른쪽 서브 트리를 어떻게 재정렬할 수 있을까? 이진 검색 트리
  • 7. POSTECH Computer Algorithm Team Concept - 앞에서 말했듯이 이진 검색 트리의 탐색은 최악의 경우 O(n)이 되기 때문에 일반적인 검색과 다를 바가 없다. - 그래서 항상 최선의 경우인 O(logn)이 되도록 만들어야 한다. - 이에 대한 알고리즘들을 ‘균형 잡힌 이진 트리’라고 한다. - 기본 적인 균형 잡힌 이진 트리의 조건은 어떤 노드의 두 자식 서브 트리의 높이 차가 1이하여야한다는 것이다. 균형 잡힌 이진 트리
  • 8. POSTECH Computer Algorithm Team Concept - 일반적으로 STL의 set, map 같은 경우 red-black tree나 AVL tree라는 알고리즘들을 이용하여 균형 잡혀져 있다. - 하지만 이런 알고리즘들은 구현이 까다롭다. - 그리고 k번째 수 찾기 등을 O(logn)에 지원하지 않기 때문에 평균적으로 균형 잡힌 이진 트리를 만드는 ‘트립 (treap)’을 사용한다. 균형 잡힌 이진 트리
  • 9. POSTECH Computer Algorithm Team Concept - 트립의 기본 조건은 이진 검색 트리와 힙(heap)을 합쳐 놓은 듯한 모양새다. 1. 현재 노드의 왼쪽 자식 노드는 부모 노드보다 작고, 오른쪽 자식 노드는 부모 노드보다 크다. 2. 자식 노드들의 우선순위보다 부모 노드의 우선순위가 높아야 한다. - 이진 검색 트리와는 다르게 우선순위라는 개념이 추가된다. Q) 우선순위는 어떻게 매겨야 균형 잡힌 이진 트리가 만들어질까? 트립
  • 10. POSTECH Computer Algorithm Team Concept A) 노드를 하나 씩 넣을 때, 랜덤하게 우선 순위를 정해준다. 이러면 트리의 높이의 기댓값이 O(logn)이 되어 우리 가 원하는 형태로 만들어진다. - 삽입은 크게 두 가지 상황을 생각해야 된다. 현재 삽입하는 노드의 우선순위가 현재 노드보다 클 때랑 작을 때이 다. - 만약 현재 노드보다 우선순위가 작으면 자식들 중 크기가 작은 자식 노드를 루트로 하는 서브 트리에서 이 과정 을 재귀적으로 반복한다. - 하지만 우선순위가 크면 이 노드를 삽입하는 노드의 자식으로 넣어야 하는데, 그냥 넣으면 높이가 1 증가하여 균 형이 깨진다. 트립
  • 11. POSTECH Computer Algorithm Team Concept - 만약 루트 노드가 삽입 노드보다 작으면 왼쪽 서브 트리 + 루트 노드 / 오른쪽 서브 트리로 쪼개면 되고 반대의 경우, 왼쪽 서브 트리 / 루트 노드 + 오른쪽 서브 트리로 쪼갠다. - 이들을 삽입 노드의 자식으로 두면 새로 생성된 트리의 왼쪽 서브 트리와 오른쪽 서브 트리의 높이 차가 1로 유 지되어 균형은 맞춰지게 된다. - 삭제는 이진 검색 트리의 삭제와 거의 동일하다. 우선순위에 따라 루트를 왼쪽 자식 노드로 할지 오른쪽 자식 노 드로 할지 결정하면 된다. 트립
  • 12. Code Explanation POSTECH Computer Algorithm Team Code Code Explanation struct Node { int key; int priority, size; Node *left, *right; Node(const int _key): key(_key), priority(rand() % 50000), size(1), left(NULL), right(NULL) { } void setLeft(Node* _left) { left = _left; calcSize(); } https://github.com/shhj1998/Problem-Solving/blob/6a914f7fecbfced5d9c325e7a7fdedac5ff1b93f/Algospot/INSERTION.cpp 트립 구현 void setRight(Node* _right) { right = _right; calcSize(); } void calcSize() { size = 1; size += (left ? left->size : 0); size += (right ? right->size : 0); } };
  • 13. POSTECH Computer Algorithm Team More - https://algospot.com/judge/problem/read/NERD2 - https://algospot.com/judge/problem/read/INSERTION