Knowledge/자료구조

[자료구조] 이진 트리의 종류와 특징

블로그 주인장 2023. 8. 21.

🎁 트리(Tree)란 무엇인가요? (더보기)

🎁 이진 트리(Binary Tree)

각 노드는 최대 2개의 자식을 갖는 트리를 뜻한다.

각 노드는 자식이 없거나 1 or 2개만을 가지는데, 자식 노드는 좌우를 구분한다.

(1). 왼쪽 자식 : 부모 노드의 왼쪽 아래

(2). 오른쪽 자식 : 부모 노드의 오른쪽 아래

🎁 이진 트리 종류

1. 포화 이진트리(Perfect binary Tree)

 - 모든 레벨에서 노드들이 꽉 채워져 있는 트리

 - 노드가 2개이며, 차수(Degree)가 2이다.

 - 모든 노드가 가득 차 있기 때문에, 단말 노드부터 루트 노드까지의 높이(Height)가 같다.

 - 노드의 갯수는 n = 2^h - 1, h = 높이

 - 포화 이진 트리의 높이가 h일 때, 노드의 수는 2의 h(+1) 제곱 -1개

 - 포화 이진 트리의 노드가 N개 일 경우, 높이는 logN

[출처] : https://velog.io/@chez_bono/C%EC%96%B8%EC%96%B4-%ED%8F%AC%EC%9D%B8%ED%84%B0%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%B4%EC%A7%84-%ED%8A%B8%EB%A6%ACBinary-Tree-%EA%B5%AC%ED%98%84

2. 완전 이진 트리(Complete binary Tree) :

 - 마지막 레벨을 제외하곤 노드들이 모두 채워져 있는 트리

 - 완전 이진 트리의 개념은 힙(Heap)과 관련 있다.

 - 노드의 갯수는 n = 2^h - 1, h = 높이

 - 마지막 레벨은 왼쪽 부터 노드가 채워져 있어야 한다.

[출처] : https://velog.io/@chez_bono/C%EC%96%B8%EC%96%B4-%ED%8F%AC%EC%9D%B8%ED%84%B0%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%B4%EC%A7%84-%ED%8A%B8%EB%A6%ACBinary-Tree-%EA%B5%AC%ED%98%84

3. 편향 트리(Skeed binary Tree) :

 - 사향트리(한쪽으로만 기울어진 트리) 

 - 각 높이에 1개의 노드만 있다.

 - 노드의 개수 => h , n <=2^h - 1, h = 높이

[출처] :&nbsp;https://velog.io/@chez_bono/C%EC%96%B8%EC%96%B4-%ED%8F%AC%EC%9D%B8%ED%84%B0%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%B4%EC%A7%84-%ED%8A%B8%EB%A6%ACBinary-Tree-%EA%B5%AC%ED%98%84

4. 정 이진 트리(Full binary Tree) :

 - 모든 노드가 0개 또는 2개의 자식 노드를 갖는 트리

 - 2 * height + 1 <= 노드의 개수 n <= 2^(height+1) - 1

[출처] : http://sean-ma.tistory.com

5. 균형 이진 트리(Balanced binary Tree) :

- 모든 노드의 좌우 서브 트리 높이가 1이상 차이 나지 않는 트리

[출처] : http://sean-ma.tistory.com

🎁 이진 트리 구현

1. 배열 : 레벨 트리 순회 순으로 배열에 구성

 - 높이가 h인 포화 이진 트리의 노드 번호를 배열의 인덱스로 이용하여 1차원 배열로 표현

 - 1차원 배열에서 인덱스를 계산을 간단히 하기 위해 인덱스 0번은 실제로 사용하지 않고, 인덱스 1번에 루트를 저장

[출처] :&nbsp;https://leejinseop.tistory.com/40

2. 연결 리스트 : 값과 간선을 관리하기 위한 노드로 연결리스트 구성한다.

 - 배열로 표현하는 것과 다르게 메모리 문제 및 삽입/삭제 연산의 비효율에 의해 연결 자료구조 방식을 사용한다

[출처] :&nbsp;https://songeunjung92.tistory.com/28

반응형

댓글