Data Structure

Full, Perfect, Complete ? 이진트리의 형태

이진2 2021. 1. 12. 23:14

이진트리에는 여러 종류가 있다

트리 중에서도 가장 많이 사용하는 것이 이진트리이지만, 이진 트리들에도 명칭이 존재한다

 

Binary Tree의 종류에는

1️⃣Full Binary Tree 2️⃣Perfect Binary Tree 3️⃣Complete Binary Tree

가 있다

 

세 가지 트리를 한글로 번역하면... 

 

 

 

그렇다

트리들의 이름만으로는 분간이 안 간다

 

그럼 세 가지 트리는 어떤 특징을 가지고 있고, 어떻게 다를까?

 

1️⃣ Full Binary Tree 

 

 

full binary tree는 모든 node의 child가 2개 or 0개인 트리를 말한다.

즉, leaf node가 아닌 node는 child를 두 개 가져야만 한다는 뜻이다 😄

그림의 오른쪽 트리에서, '2'와 '4'는 child를 하나씩 가졌기 때문에 full binary tree가 아니다.

 

 

2️⃣ Perfect Binary Tree

 

 

perfect binary tree는 full binary tree + 모든 leaf node의 depth가 같은 트리를 말한다.

위의 그림을 보며 가득 찬 이진트리라고 생각하면 이해가 쉽다

perfect binary tree는 가장 깊은 depth의 node들은 child가 없고, 다른 모든 node들은 두 개의 child를 가진다.

 

3️⃣ Complete Binary Tree

 

 

complete binary tree의 depth가 d라고 할 때, depth가 d-1까지는 perfect binary tree이면서, depth가 d인 node(제일 아래 층 node들)은 왼쪽부터 오른쪽의 order대로 node가 채워져 있는 트리를 말한다.

즉, 중간의 순서를 건너뛰고 다음 node를 채울 순 없다.

왼쪽의 그림은 위와 같은 정의를 만족하지만, 오른쪽 그림은 5, 1 다음에 4의 left child node가 채워지지 않고 right child node가 생겼기 때문에 complete binary tree가 아니다.