자료구조&알고리즘

[자료구조&알고리즘] 트리(Tree)

라텐느 2025. 5. 24. 19:37

❓트리(Tree)란?

트리는 계층적인 구조를 표현하는 데 사용되는 대표적인 자료구조로, 여러 노드(node)와 이들을 연결하는 간선(edge)로 이루어진 비선형 자료구조. 실제 나무를 거꾸로 놓은 것과 같은 형태를 가지며, 컴퓨터의 디렉토리 구조, 조직도, 데이터베이스 인덱스 등 다양한 분야에서 활용


🧩트리의 구조와 기본 용어

        A
      / | \
     B  C  D
    /|\   / \
   E F G H   I
  • 노드(Node): 트리의 기본 단위로, 데이터(값)와 하위 노드에 대한 포인터를 가짐. (위 그림의 A~I)
  • 간선(Edge): 노드와 노드를 연결하는 선.
  • 루트 노드(Root Node): 트리의 최상위에 위치하며, 부모가 없는 노드. A가 루트 노드
  • 부모 노드(Parent Node): 자식 노드를 가진 노드.
  • 자식 노드(Child Node): 부모 노드의 하위에 있는 노드. B는 E, F, G의 부모, E, F, G는 B의 자식
  • 형제 노드(Sibling Node): 같은 부모를 가진 노드들.  E, F, G는 서로 형제 노드
  • 리프 노드(Leaf Node, 단말 노드): 자식이 없는 노드. E, F, G, H, I는 리프 노드
  • 내부 노드(Internal Node): 자식 노드를 가진 노드. B는 내부 노드
  • 깊이(Depth): 루트에서 해당 노드까지의 간선 수.
  • 레벨(Level): 트리의 층수(루트는 0 또는 1). E의 깊이/레벨은 2
  • 높이(Height): 해당 노드에서 리프 노드까지의 가장 긴 경로의 간선 수. 위 트리의 높이는 2(간선 기준)
  • 차수(Degree): 한 노드가 가진 자식 노드의 수. B의 차수는 3(E, F, G)
  • 경로(Path): 한 노드에서 다른 노드로 가는 노드들의 순서.
  • 서브트리(Subtree): 특정 노드를 루트로 하는 하위 트리. B와 그 자식들 전체가 하나의 서브트리

💠트리의 특징

  • 비선형 자료구조: 배열, 리스트와 달리 데이터가 순차적으로 저장되지 않음.
  • 계층적 구조: 부모-자식 관계로 구성되어 계층적인 데이터 표현에 적합.
  • 사이클 없음: 임의의 노드에서 시작해 자기 자신으로 돌아오는 경로(사이클)가 존재하지 않음.
  • 단일 루트: 반드시 하나의 루트 노드만 존재.
  • 간선의 수: 노드가 N개이면 항상 N-1개의 간선을 가짐.
  • 모든 노드는 하나의 부모만 가질 수 있음(루트 제외).

🌲트리의 종류

1. 일반 트리

  • 자식 노드 수에 제한이 없음

2. 이진 트리(Binary Tree)

  • 각 노드가 최대 2개의 자식(왼쪽, 오른쪽)만 가짐
 
      A
     / \
    B   C
   / \   \
  D   E   F
  • 각 노드의 자식은 최대 2개.

3. 완전 이진 트리(Complete Binary Tree)

  • 마지막 레벨을 제외한 모든 레벨이 노드로 가득 차 있고, 마지막 레벨은 왼쪽부터 채워짐
 
      A
     / \
    B   C
   / \  /
  D  E F
  • D, E, F는 마지막 레벨.

4. 포화 이진 트리(Perfect Binary Tree)

  • 모든 리프 노드가 동일한 깊이에 있고, 모든 내부 노드가 두 자식 노드를 가짐
 
      A
     / \
    B   C
   / \ / \
  D  E F  G
  • 모든 레벨이 가득 참.

5. 편향 트리(Skew Tree)

  • 모든 노드가 한쪽 자식만 가짐
 
A
 \
  B
   \
    C
     \
      D
  • 오른쪽 편향 트리.

6. 트라이(Trie)

  • 문자열 검색에 특화된 트리
 
root
 ├─ a ─ l ─ g ─ o
 ├─ h ─ i ─ g ─ h
 └─ r ─ e ─ b ─ r ─ o
           └─ p ─ l ─ a ─ y
  • 각 경로가 하나의 문자열을 나타냄8.

7. m-원 탐색 트리(m-way Search Tree): 한 노드가 최대 m개의 자식을 가질 수 있는 트리.


💿트리의 활용 예시

  • 파일 시스템: 디렉토리와 파일 구조 표현.
    /
    ├── home
    │   ├── user1
    │   └── user2
    └── etc
        ├── config
        └── hosts

  • 데이터베이스 인덱스: B-트리, B+트리 등.
  • 계층적 데이터 표현: 조직도, 가계도 등.
  • 효율적인 탐색, 삽입, 삭제: 이진 탐색 트리, 힙(Heap) 등에서 사용.

🔹트리와 그래프의 관계

트리는 그래프의 하위 개념으로, 방향성이 있고 사이클이 없는 연결 그래프의 일종입니다. 모든 노드는 루트에서 시작해 단 하나의 경로로만 접근할 수 있습니다.