Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- JWT
- 알고리즘
- node.js
- html
- 코딩테스트
- OOP
- puppeteer
- 탐욕법
- nestjs
- Kubernetes
- bean
- typescript
- TIL
- GraphQL
- 자료구조
- REST API
- Linux
- 인접리스트
- MySQL
- Spring
- 프로그래머스
- css
- 인접행렬
- LifeCycle
- Interceptor
- java
- Deep Dive
- dfs
- javascript
- winston
Archives
- Today
- Total
처음부터 차근차근
[자료구조] Binary Tree, BST 본문
728x90
Binary Tree(이진 트리)
부모 노드의 자식 노드 수가 2개 이하로 구성되어 있는 Tree를 의미한다.
이진 트리는 다음과 같이 분류 할 수 있다.
- 정이진 트리(full binary tree): 자식 노드가 0 또는 2개인 이진 트리를 의미합니다.
- 완전 이진 트리(complete binary tree): 왼쪽에서부터 채워져 있는 이진 트리를 의미합니다. 마지막 레벨을 제외하고는 모든 레벨이 완전히 채워져 있으며 마지막 레벨의 경우 왼쪽부터 채워져 있습니다.
- 변질 이진 트리(degenerate binary tree): 자식 노드가 하나밖에 없는 이진 트리를 의미합니다.
- 포화 이진 트리(perfect binary tree): 모든 노드가 꽉 차 있는 이진 트리를 의미합니다.
- 균형 이진 트리(balanced binary tree): 모든 노드의 왼쪽 하위 트리와 오른쪽 하위 트리의 차이가 1 이하인 트리입니다. map, set을 구성하는 레드블랙트리는 균형 이진 트리 중 하나입니다.
Binary Search Tree
이진 탐색 트리란 정렬된 이진 Tree로써 다음과 같은 속성을 가지고 있다.
- 노드의 왼쪽 하위 트리에는 노드의 키보다 작은 키가 있는 노드만 포함된다.
- 노드의 오른쪽 하위 트리에는 노드의 키보다 큰 키가 있는 노드만 포함된다.
- 왼쪽 및 오른쪽 하위 트리도 각각 이진 탐색 트리이어야 한다.
- 중복된 키를 허용하지 않는다.
- 이진 탐색 트리는 "검색"을 하기에 용이하다.
즉 왼쪽 자식 < 부모 < 오른쪽 자식이어야 한다.
BST의 특징
- BST는 Inorder Traversal(중위 순회)을 수행하여 모든 키를 정렬된 순서로 가져올 수 있다.
- BST의 검색에 대한 시간복잡도는 균형 상태이면 O(logN)의 시간이 걸리지만, 불균형한 상태(skewed)의 경우 O(n)이 걸린다.
이는 삽입 순서에 따라 달라지며, 불균형한 자료 구조인 경우 시간 복잡도가 O(N)이 된다.
삽입 순서가 어떻게 되든 트리의 노드들을 회전시키는 등의 방법을 통해 "균형잡히게 만든" 이진 탐색 트리가 있다.
발전된 트리로는 AVL트리, Red-Black 트리가 존재한다.
(예시로 map이라는 자료구조는 레드블랙트리 기반으로 구현되어 있다)
참조
'CS > 자료구조' 카테고리의 다른 글
[TypeScript] 완전 이진 트리, 이진 탐색 트리 구현 (1) | 2023.12.18 |
---|---|
[자료구조] Tree (0) | 2023.11.16 |
[Javascript] 인접행렬, 인접 리스트 구현 방법 (0) | 2023.11.15 |
[자료구조] 인접 행렬, 인접 리스트 (0) | 2023.11.15 |
[자료구조] Graph (0) | 2023.11.15 |