이진트리 알아보기 전 Tree 기본 개념 보러가기
[ 자료 구조 ] Tree / Graph
Tree 알아보기 그래프의 여러 구조 중 단방향 그래프의 한 구조로, 하나의 뿌리로부터 가지가 사방으로 뻗은 형태가 나무와 닮았다고 해서 트리 구조라고 부른다. 트리는 계층적 자료구조 / 비선
wldbseja.tistory.com
이진트리란 ?
- 이진트리(Binary tree)는 자식 노드가 최대 두 개인 노드로 구성된 트리이다.
- 자료의 삽입, 삭제 방법에 따라 정 이진트리, 완전 이진트리, 포화 이진트리로 나뉜다.
- 이진트리는 이진 탐색 트리와 이진 힙 구현에 사용되며, 효율적인 검색과 정렬을 위해 사용된다.
이진트리 특징
- 정 이진트리 : 각 노드가 0개 혹은 2개의 자식 노드를 갖는다.
- 포화 이진트리 : 정 이진트리이면서 완전 이진트리인 경우 / 모든 리프 노드의 레벨이 동일하고, 모든 레벨이 가득 채워져 있는 트리
- 완전 이진트리 : 마지막 레벨을 제외한 모든 노드가 가득 차 있어야 하고, 마지막 레벨의 노드는 전부 차 있지 않아도 되지만 왼쪽이 채워져야 함
이진 탐색 이란 ?
- 이진 탐색 알고리즘이란 정렬된 데이터 중에서 특정한 값을 찾기 위한 탐색 알고리즘 중 하나이다.
- 오름차순으로 정렬된 정수의 배열을 같은 크기의 두 부분 배열로 나눈 후, 두 부분 중 탐색이 필요한 부분에서만 탐색하도록 탐색 범위를 제한하여 원하는 값을 찾는 알고리즘이다.
이진 탐색 트리
- 이진 탐색 트리란 이진 탐색의 속성이 이진트리에 적용된 특별한 형태의 이진트리이다.
- 모든 왼쪽 자식의 값이 루트나 부모보다 작고, 모든 오른쪽 자식의 값이 루트나 부모보다 큰 값을 가지는 특징이 있다.
- 이진 탐색 특징
- 각 노드에 중복되지 않는 키(Key)가 있다.
- 루트노드의 왼쪽 서브 트리는 해당 노드의 키보다 작은 키를 갖는 노드들로 이루어져 있다.
- 루트노드의 오른쪽 서브 트리는 해당 노드의 키보다 큰 키를 갖는 노드들로 이루어져 있다.
- 좌우 서브 트리도 모두 이진 탐색 트리여야 한다.
- 이진 탐색 과정
- 루트 노드의 키와 찾고자 하는 값을 비교 (찾고자 하는 값이라면 탐색을 종료)
- 트리 안에 찾고자 하는 값이 없더라도 최대 h번(트리의 높이) 만큼의 연산 및 탐색이 진행
- 찾고자 하는 값이 루트 노드의 키보다 작다면 왼쪽 서브 트리로 탐색
- 찾고자 하는 값이 루트 노드의 키보다 크다면 오른쪽 서브 트리로 탐색
- 루트 노드의 키와 찾고자 하는 값을 비교 (찾고자 하는 값이라면 탐색을 종료)
- 이진 탐색 특징
이진 탐색 예시 순서
문제 : 트리에서 5의 값을 찾아라
- 제일 처음에는 루트 노드와 값을 비교
- 루트 노드 : 10
- 루트 노드 보다 작기 때문에 왼쪽 서브 트리로 탐색
- 그 다음 노드와 값을 비교
- 루트 노드 : 7
- 찾고자 하는 값이 아니므로 다시 왼쪽 서브 트리로 탐색
- 그 다음 노드와 값을 비교
- 루트 노드 : 5
- 찾고자 하는 값이므로 탐색 종료
총 연산은 3번의 탐색이 진행되었음
트리 순회
- 특정 목적을 위해 트리의 모든 노드를 한 번씩 방문하는 것을 트리 순회라고 함
- 트리 순회 3가지 방법 ( 노드 순회시 왼쪽 -> 오른쪽으로 조회)
- 전위순회
- 부모 노드가 제일 먼저 방문되는 순회 방식
- 주로 트리를 복사할 때 사용
- 중위순회
- 루트를 가운데에 두고 순회
- 이진 탐색 트리의 오름차순으로 값을 가져올 때 사용
- 후위순회
- 루트를 가장 마지막에 순회
- 트리를 삭제할 때 사용
- 전위순회
- 순회 방식을 나누는 이유
- 모든 노드를 방문하기 위해서는 일정한 조건이 필요하고, 트리 구조를 유지보수하거나 특정 목적을 위해서도 순회 방법에 대한 정의는 필수적으로 필요하다.
트리 순회 결과
1
/ \
2 3
/ \ / \
4 5 6 7
Tree
- 전위순회 결과
- 1, 2, 4, 5, 3, 6, 7
- 중위순회 결과
- 4, 2, 5, 1, 6, 3, 7
- 후위순회 결과
- 4, 5, 2, 6, 7, 3, 1
'자료구조 \ 알고리즘 기법' 카테고리의 다른 글
[ 자료 구조 ] Tree / Graph (0) | 2023.05.11 |
---|---|
[ 자료 구조 ] 스택(Stack) / 큐(Queue) (0) | 2023.05.11 |
[ 자료 구조 ] 자료 구조 살펴보기 (0) | 2023.05.10 |
[ 알고리즘 기법 ] 버블 정렬(bubble sort) 알고리즘 개념 정리 (0) | 2023.04.21 |
[ 알고리즘 기법 ] 재귀 함수 개념 / 재귀 알고리즘 기법 정리 (0) | 2023.04.14 |