본문 바로가기
부트캠프교육중/알고리즘

이진트리, 이진탐색트리

by 뭉지야 2023. 3. 15.
728x90

<이진 트리 binary tree>
-자식 노드가 최대 두개인 노드로 구성된 트리.
이 두개의 자식노드는 왼쪽 자식노드와 오른쪽 자식노드로 나눌수있다.
-이진 탐색 트리와 이진 힙 구현에 사용되며, 효율적인 검색과 정렬을 위해 사용된다.
-자료의 삽입, 삭제 방법에 따라 정이진트리, 포화이진트리, 완전이진트리로 나뉜다.

 

#특징
-정 이진 트리(Full binary tree) : 각 노드가 0개 혹은 2개의 자식 노드를 갖는다.
-포화 이진 트리(Perfect binary tree): 정 이진 트리이면서 완전 이진 트리인 경우이다. 모든 리프 노드의 레벨이 동일하고, 모든 레벨이 가득 채워져있는 트리이다.
-완전 이진 트리(Complete binary tree) : 마지막 레벨을 제외한 모든 노드가 가득 차 있어야 하고, 마지막 레벨이 노드는 전부 차 있지 않아도 되지만 왼쪽이 채워져야 한다.

 


일단 이진 탐색이 뭔지 먼저 알아보자!

 

#이진 탐색
- 이진 탐색 알고리즘이란 정렬된 데이터 중에서 특정한 값을 찾기 위한 탐색 알고리즘 중 하나이다.
-오름차순으로 정렬된 정수의 배열을 같은 크기의 두 부분 배열로 나눈후, 두 부분 중 탐색이 필요한 부분에서만 탐색하도록 탐색 범위를 제한하여 원하는 값을 찾는 알고리즘이다.
1. 배열의 중간에 내가 찾고자 하는 값이 있는지 확인한다.
2. 중간값이 내가 찾고자 하는 값이 아닐경우, 오름차순으로 정렬된 배열에서 중간값보다 큰값인지 작은값인지 판단한다.(왼쪽으로갈지, 오른쪽으로갈지)
3. 찾고자 하는 값이 중간값보다 작은 값일경우, 배열의 맨앞부터  중간값 전까지의 범위를 탐색 범위로 잡고 탐색을 반복 수행한다.
4. 찾고자 하는 값이 중간값보다 큰 값일 경우, 배열의 중간값의 다음 값부터 맨 마지막까지를 탐색 범위로 잡고 탐색을 반복 수행한다.

 

<이진 탐색 트리 binary search tree>
- 이진 탐색의 속성이 이진 트리에 적용된 특별한 형태의 이진 트리이다.

-이진 탐색 트리는 이러한 이진 탐색의 알고리즘이 이진 트리에 적용된 형태로, 트리의 루트노드는 이진 탐색에서 리스트의 중간값이 된다.
-루트노드의 왼편 서브 트리의 값들은 이진 탐색 알고리즘에 기반하여 모두 루트노드의 값보다 작은 값들이 자리 잡고 있고 
-루트노드의 오른편 서브 트리의 값들은 루트노드의 값보다 큰 값들이 자리 잡고 있어야 한다.

 

#이진탐색트리 특징1
1. 각 노드에 중복되지 않는 키가 있습니다.
2. 루트노드의 왼쪽 서브 트리는 해당 노드의 키보다 작은 키를 갖는 노드들로 이루어져 있습니다.
3. 루트노드의 오른쪽 서브 트리는 해당 노드의 키보다 큰 키를 갖는 노드들로 이루어져 있습니다.
4. 좌우 서브 트리도 모두 이진 탐색 트리여야 합니다.

 

#이진탐색트리 특징2

-모든 왼쪽 자식의 값이 루트나 부모모다 작고, 모든 오른쪽 자식의 값이 루트나 부모모다 큰 값을 가진다.

-이진 탐색 트리는 균형 잡힌 트리가 아닐때, 입력되는 값의 순서에 따라 한쪽으로 노드들이 몰리게 될수있습니다. 
균형이 잡히지 않은 트리는 탐색하는데 시간이 더 걸리는 경우도 있기 때문에 해결해야 할 문제입니다. 이 문제를 해결하기 위해 삽입과 삭제마다 트리의 구조를 재조정하는 과정을 거치는 알고리즘을 추가할수있습니다.

-기존 이진 트리보다 탐색이 빠르다는 장점이 있다.
-이진 탐색 트리의 연산은 트리의 높이가 h라면 o(h)의 복잡도를 가지게 된다. 

 

#이진 탐색 트리의 탐색의 과정
1. 루트 노드의 키와 찾고자 하는 값을 비교한다. 만약 찾고자 하는 값이라면 탐색을 종료한다.
2. 찾고자 하는 값이 루트 노드의 키보다 작다면 왼쪽 서브 트리로 탐색을 진행한다.
3. 찾고자 하는 값이 루트 노드의 키보다 크다면 오른쪽 서브 트리로 탐색을 진행한다.

 

이 과정을 찾고자 하는 값을 찾을때까지 반복해 진행한다. 
만약 값을 찾지 못한다면 그대로 연산을 종료하게 된다. 
이러한 탐색과정을 거치면 최대 트리의 높이(h)만큼 탐색을 진행한다.
트리안에 찾고자 하는 값이 없더라도 최대 h번(트리의 높이)만큼의 연산 및 탐색이 진행된다.


출처

코드스테이츠 

728x90

'부트캠프교육중 > 알고리즘' 카테고리의 다른 글

그래프(Graph)  (0) 2023.03.16
트리 순회  (0) 2023.03.15
tree  (0) 2023.03.15
Queue  (0) 2023.03.14
Stack  (0) 2023.03.14