•
정의
◦
비선형 자료구조로 노드로 구성된 계층적 자료구조이다.
◦
그래프의 일종으로 Cycle을 이루지 않는 그래프로 Node와 Edge가 존재한다.
▪
Node: 트리에서 데이터를 저장하는 기본 요소 (데이터와 다른 연결된 노드에 대한 정보 포함)
▪
Root Node: 최상위 노드
▪
Level: 최상위 노드의 Level을 0이라 하였을 때, 최상위 노드로부터 경로의 길이값
▪
Parent Node: 어떤 노드의 하위 레벨에 연결된 노드
▪
Child Node: 어떤 노드의 상위 레벨에 연결된 노드
▪
Leaf Node: Child Node가 하나도 없는 노드
▪
Sibling: 동일한 Parent Node를 가진 노드
▪
Depth: 트리에세 Node가 가질 수 있는 최대 Level
•
특징
◦
트리에 또 다른 트리가 존재하는 재귀적 자료구조이다.
◦
데이터를 순차적으로 저장하지 않는 비선형 자료구조이다.
◦
Binary Tree, Binary Search Tree, B-Tree, Heap Tree 등 다양한 종류가 존재한다.
▪
Binary Tree: Node의 브랜치의 갯수가 최대 2개인 트리
▪
Binary Search Tree: 이진 트리에 제약조건을 추가한 트리, 왼쪽 노드는 부모 노드보다 작은 값, 오른쪽 노드는 부모 노드보다 큰값을 저장하는 제약 조건이 존재한다.
◦
주로 데이터 검색에 사용되며 탐색 속도가 빠름
◦
◦
•
용도
◦
주로 이진 트리 형태는 탐색 알고리즘 구현을 위해 많이 사용된다.
▪
배열에서 특정 값을 찾고자 할 때 최악의 경우 O(N)이나 이진 탐색 트리의 경우 최악의 경우 O(log N)기 때문이다.
•
Binary Search Tree란?
◦
이진탐색트리는 정렬된 Tree, 어느 node를 선택하든 해당 node의 left subtree에는 그 node의 값보다 작은 값들을 지닌 node들로만 이루어져 있고, node의 right subtree에는 그 node 값보다 큰 값들을 지닌 node들로만 이루어져 있는 binary tree, 검색과 저장, 삭제의 시간복잡도는 모두 O(log n)이고 worst case는 한 쪽으로 치우친 tree가 됐을 때, O(n)
•
Hash Table이란?
◦
효율적인 탐색을 위한 자료구조로써 key-value 쌍으로 데이터를 입력받는 자료구조, hash function h에 key값을 입력으로 넣어 얻은 해시값 key를 위치로 하여 key-value 데이터 쌍을 저장, 저장, 삭제, 검색 모두 O(1)
•
데이터 삽입, 조회, 삭제
•
삽입
◦
현재 노드를 루트 노드부터 시작하여 삽입할 값과 현재 노드의 값을 비교해 이동하다 삽입될 공간의 브랜치가 비어있으면 삽입
•
조회
◦
주어진 키 값이 루트 노드의 키 값과 같으면 탐색에 성공
◦
주어진 키 값이 루트 노드의 키 값보다 작으면 왼쪽 서브트리를 탐색
◦
주어진 키 값이 루트 노드의 키 값보다 크면 오른쪽 서브트리를 탐색
•
삭제
1.
Leaf 노드인 경우
: 부모 노드의 연결을 삭제
2.
하나의 서브트리만 가지고 있는 경우
: 해당 노드를 삭제한 후, 서브 트리를 삭제된 위치에 붙여준다.
3.
두개의 서브트리를 가지고 있는 경우
: 현재 노드의 좌측 서브트리에서 가장 큰 값과 우측 서브트리의 가장 작은 값 중 한 값으로 현재 노드를 대체한다.
5. 이진 탐색 트리의 시간 복잡도와 단점
1.
시간 복잡도
•
depth를 h라고 표기한다면 O(h)
•
n개의 노드를 가진다면 h = log n에 가까우므로 시간 복잡도를 log n이라고 하는 것
2.
이진 탐색 트리 단점
•
데이터의 구성이 불균형할 때, 최악의 경우 링크드 리스트와 동일한 성능을 보여줌, 이를 방지하기 위해 B-트리 등이 존재