2022. 12. 12. 14:56ㆍ개인공부/C++
tree
데이터 구조의 하나로 , 데이터 항목의 한 묶음을 세그먼트라고 하는데, 이 세그먼트 사이의 연결을 나뭇가지처럼 생각한 것이 트리구조이다. 상위 세그먼트(부모) 는 하나 이상의 하위 세그먼트(자식)를 가지고 있으나, 하위 세그먼트는 반드시 한 상위 세그먼트 밖에 가질 수 없다.
용어 정리
레벨 : 트리의 층을 표현하며 가장 높은 레벨 값이 트리의 높이이다 . 가장 위의 레벨은 0이고 내려갈수록 증가한다.
루트노드: 부모가 존재하지 않는 노드
리프노드(단말노드): 자식이 없는 노드
이진트리
트리구조중에서도 이진트리라는 개념은 자식노드가 2개 이하인 트리이다.
예를 들면 왼쪽그림의 경우에는 부모가 4개의 자식노드를 가지고 있으므로 이진트리가 아니다
오른쪽 그림의 경우에는 모두 자식 노드가 2개이하이므로 이진트리라고 할 수 있다.
완전이진트리
이러한 경우에는 완전이진트리를 배열로 구현할 수 있다.
이진탐색
탐색 알고리즘중에 한가지 방법으로 O(logN)의 시간복잡도를 가진다.
1. 정렬되어있는 데이터에 적용가능하다.
2. 데이터의 절반 지점을 기준으로 나누면서 탐색하는 방법이다.
이진탐색트리
1. 이진탐색을 사용 할 수 있게 고안된 이진트리
2. 데이터 입력시 O(logN) 효율
3. 탐색 효율 O(lonN) 이다.
4. 트리의 모양이 밸런스가 유지 되지 않으면 제대로 된 효율이 나오지 않는다.
>> 이러한 문제를 해결하기 위해서 자가균형 기능이 필요한데 대표적으로 AVL, Red/Black 등이 있다.
'개인공부 > C++' 카테고리의 다른 글
enum class (0) | 2022.12.14 |
---|---|
tree 구현해보기 (0) | 2022.12.13 |
iterator (list) (0) | 2022.12.11 |
iterator (0) | 2022.12.10 |
template class list (0) | 2022.12.09 |