CS지식/자료구조 (Data Structure)

트리(Tree) 기본 구조와 핵심 개념 정리

불광동 물주먹 2025. 4. 27. 01:07

트리(Tree) 기본 구조와 핵심 개념 정리

1. 트리(Tree)란 무엇인가?

트리는 **노드(Node)**들의 집합으로 구성된 비선형 자료구조이다.
각 노드는 하나의 값(value)과 여러 개의 자식 노드(child nodes)에 대한 **레퍼런스(참조)**를 가진다.

트리의 특징

  • 루트(Root): 최상단에 위치한 하나의 노드
  • 사이클 없음: 어떤 경로로도 다시 자신에게 돌아올 수 없다.
  • 부모-자식 관계: 각 자식 노드는 오직 하나의 부모 노드만 가진다.
  • 계층적 구조: 데이터가 순차적으로가 아닌 계층적으로 저장된다.
  • 재귀적 성질: 각 노드 자체가 또 다른 서브트리(subtree)를 구성할 수 있다.

2. 트리 기본 용어 정리

사진 출처 - 유튜브 쉬운 코드



 

용어 설명
간선(Edge) 노드와 노드를 연결하는 선. 구현 관점에서는 레퍼런스(포인터) 의미.
루트 노드(Root Node) 트리의 가장 최상단에 있는 노드. 오직 하나 존재.
자녀 노드(Child Node) 어떤 노드로부터 이어진 하위 노드들.
부모 노드(Parent Node) 자녀 노드를 가지는 노드.   위 사진 - 2,5,9,6,11
형제 노드(Sibling Node) 같은 부모를 공유하는 노드들.    위 사진 - {8,1,4} , {6,7} , {5,9}
조상 노드(Ancestor Node) 부모를 거슬러 올라가면서 만나는 모든 노드들.  위 사진 - 8의 조상 노드 - 11,9,2
자손 노드(Descendant Node) 어떤 노드의 자녀와 그 자녀의 자녀까지 모두 포함.   위 사진 - 9의 자손 노드 - 11,8,1,4
내부 노드(Internal Node) 자녀 노드를 가지고 있는 노드.        위 사진 - 2,5,9,6,11
외부 노드(External Node, Leaf Node) 자녀 노드가 없는 노드. (= 리프 노드)    위 사진 - 3,7,8,1,4
경로(Path) 한 노드에서 다른 노드까지 연결된 노드들의 연속.    위 사진 - 2에서 7 경로 : 2-5-7
경로 길이(Path Length) 경로를 따라 이동할 때 지나야 하는 간선(Edge) 수.      위 사진 -  2에서 7 경로 길이 :3  , 2에서 3 경로 길이 :4
노드의 높이(Node Height) 해당 노드에서 가장 먼 리프 노드까지의 경로 길이.     위 사진 -   5의 높이 :2  , 리프의 노드의 높이 : 0 
트리의 높이(Tree Height) 루트 노드의 높이. 트리에서 가장 먼 리프까지의 경로 길이.    위 사진 - 트리 높이 : 3
노드의 깊이(Node Depth) 루트 노드에서 특정 노드까지 이동한 간선 수.                위 사진 - 11의 깊이  :2  , 루트 노드의 깊이 : 0 
트리의 깊이(Tree Depth) 트리에서 가장 깊게 위치한 노드의 깊이.              위 사진 -  트리 깊이 :3 , 트리 높이 = 트리 깊이
노드의 차수(Node Degree) 해당 노드가 가진 자녀 노드의 수.                      위 사진 -  11의 차수 :3 , 3의 차수 : 0   
트리의 차수(Tree Degree) 트리 전체 노드 중 가장 높은 차수.                    위 사진 -  트리의 차수 : 3    
두 노드 사이 거리(Distance) 두 노드를 연결하는 최단 경로상의 간선 수.        위 사진 -  Distance(9,8) : 2 , Distance(3,8) : 6)
노드의 레벨(Level) 루트에서 몇 번 간선을 거쳐 도달했는지를 나타내는 수.          위 사진 - 루트 노드의 레벨 : 0   , 5 노드의 레벨1  , 11 노드 레벨 2   
트리의 폭(Tree Width) 임의의 동일 레벨에 존재하는 노드의 수 중 최대값.           위 사진 -  level 2의 width : 3
노드의 크기(Node Size) 해당 노드와 모든 자손 노드 수의 합.                                 위 사진 - 9의 크기 : 5  , 5의 크기 :4
트리의 크기(Tree Size) 트리 전체에 존재하는 노드 수.
서브트리(Subtree) 하나의 노드와 그 노드의 모든 자손 노드로 구성된 트리.

 

 


3. 트리의 기본 성질

  • 루트 노드는 반드시 하나만 존재한다.

  • 트리는 순환(사이클)이 존재하지 않는다.

  • 하나의 자식 노드는 정확히 하나의 부모를 가진다.

 

 

 

  • 트리는 데이터가 순차적으로 저장되는 것이 아니라 계층적으로 저장된다.
  • 트리의 각 노드는 독립적인 서브트리를 구성할 수 있다.

4. 이진 트리(Binary Tree)

이진 트리란, 각 노드가 최대 두 개 이하의 자식 노드만 가지는 트리이다.
왼쪽 자식을 Left Child, 오른쪽 자식을 Right Child라 부른다.

이진 트리의 특징

  • 모든 노드는 0개, 1개 또는 2개의 자식만 가질 수 있다.
  • 이진 트리는 다양한 종류로 구분될 수 있다.

5. 이진 트리의 종류

1) 포화 이진 트리(Perfect Binary Tree)

  • 모든 레벨이 노드로 가득 채워진 트리.
  • 모든 리프 노드가 동일한 레벨에 위치.

사진출처 - 유튜브 쉬운코드

2) 완전 이진 트리(Complete Binary Tree)

  • 마지막 레벨을 제외한 모든 레벨이 가득 채워져 있다.
  • 마지막 레벨은 왼쪽부터 순서대로 노드가 차 있다.

 

사진출처 - 유튜브 쉬운코드

3) 정 이진 트리(Full Binary Tree)

  • 모든 노드가 자식 노드를 0개 또는 2개 가진다.
  • 즉, 자식이 하나만 있는 노드는 존재하지 않는다.

 

사진출처 - 유튜브 쉬운코드

4) 변질 이진 트리(Degenerate/Skewed Binary Tree)

  • 각 부모 노드가 자식을 하나만 가진 트리.
  • 일종의 리스트 형태처럼 한쪽으로 길게 쏠린 구조.
    • 왼쪽만 연결: Left-skewed Tree
    • 오른쪽만 연결: Right-skewed Tree

사진출처 - 유튜브 쉬운코드

 

5) 균형 이진 트리(Balanced Binary Tree)

  • 모든 노드의 왼쪽, 오른쪽 서브트리 높이 차가 최대 1 이하.
  • 트리의 높이가 log(N)에 가깝게 유지되어 효율적인 탐색 가능.

사진출처 - 유튜브 쉬운코드


6. 트리 구조의 재귀적 성질

트리는 본질적으로 재귀적(Recursive) 구조를 가진다.

  • 루트 노드를 기준으로 각 자식 노드들은 자신만의 또 다른 서브트리(subtree)를 구성한다.
  • 이 재귀적 성질 덕분에 트리 탐색(DFS, BFS) 같은 알고리즘이 재귀 호출 방식으로 쉽게 구현된다.

마무리 정리

트리는 단순히 데이터를 담는 그릇이 아니라,
복잡한 관계(부모-자식, 조상-자손)를 표현하고, 빠르게 탐색, 삽입, 삭제할 수 있는 계층적 자료구조이다.

트리 구조를 이해하면,
이진 탐색 트리(BST), 힙(Heap), 레드-블랙 트리(Red-Black Tree), B-트리 등 고급 자료구조도 자연스럽게 이어서 이해가 가능