본문 바로가기
프론트엔드 면접 질문/자료구조와 알고리즘

[자료구조] 트리(Tree)의 개념과 종류

 

트리(Tree)란?

트리(Tree)노드들이 나무 가지처럼 연결된 비선형 계층적 자료구조입니다.

 

 

트리는 나무를 거꾸로 뒤집어 놓은 모양과 유사합니다.

또한 트리 내에 다른 하위 트리가 있고, 그 하위 트리 안에는 또 다른 하위 트리가 있는 재귀적 자료구조이기도 합니다.

 

트리의 대표적인 예시로는 컴퓨터의 directory구조가 있습니다.


 

📌 트리 구조에서 사용되는 기본 용어

명칭 설명
노드(node)
트리에서 데이터를 저장하는 기본적인 단위
그래프의 정점
루트 노드(root node) 부모가 없는 노드, 트리 구조에서 최상위에 존재하는 A와 같은 노드
내부 노드(internal node) 단말 노드가 아닌 노드
단말 노드(leaf node) 자식이 없는 노드, (말단 노드, 잎 노드 라고도 부름)
밑으로는 또 다른 노드가 연결되어 있지 않은 H,I,J,F,G와 같은 노드
경로(edge) 노드와 노드를 연결하는 연결선(link, branch 라고도 부름)
그래프의 간선
형제(sibling)  같은 부모를 가지는 노드
노드의 크기(size) 자신을 포함한 모든 자손 노드의 개수
노드의 깊이(depth) 루트에서 어떤 노드에 도달하기 위해 거쳐야 하는 간선의 수
루트 노드로부터의 거리
노드의 레벨(level) 트리의 특정 깊이를 가지는 노드의 집합
노드의 차수(degree) 하위 트리 개수 / 간선 수(degree) = 각 노드가 지닌 가지의 수
트리의 차수(degree of tree) 트리의 최대 차수
트리의 높이(height) 루트 노드에서 가장 깊숙히 있는 노드의 깊이
보조트리(Sub-Tree) 큰 트리(전체)에서 속하는 작은 트리
트리 내의 하위집합 또는 부분집합

 

 

📌 트리의 특징

위에서 말했듯 그래프(Graph)정점(vertex)들과 간선(edge)들로 이루어진 추상적인 자료구조로, 그 중에서도 트리는 특별한 형태의 그래프입니다. 트리(Tree)는 아래와 같은 특징을 가지며, 이 특징들 때문에 그래프와는 다른 새로운 성질을 가지게 됩니다.

 

  1. 트리는 사이클(cycle)이 없는 비순환 구조
     즉, 한 정점에서 출발하여 다시 자기 자신으로 돌아오는 경로가 존재하지 않습니다.

  2. 하나의 루트 노드와 0개 이상의 하위 트리
     루트 노드는 반드시 하나여야 하며, 두개가 될 수 없습니다

  3. 모든 노드는 단 하나의 부모(parent) 노드를 가짐
     루트 노드를 제외한 모든 노드는 반드시 하나의 부모 노드를 가져야 합니다.

  4. 노드가 N개인 트리는 항상 N-1개의 간선(edge)을 가짐
    ▪ 루트 노드를 제외한 모든 노드는 반드시 하나의 부모 노드를 가져야 합니다.

  5. 모든 노드로 갈 수 있는 경로는 루트 노드를 거쳐야만 가능
    ▪ 다른 노드들이 모든 경로를 지나기 위해서는 반드시 루트 노드를 거치는 구조를 가집니다.

 

위와 같은 특징들로 트리(Tree)는 일반적인 그래프(Graph)와는 달리, 계층 구조(hierarchical structure)를 가지며, 데이터를 표현하거나 분석하기에 적합한 자료구조가 됩니다.

 

📌 트리의 종류

트리의 종류는 노드의 갯수나 위치에 따라서 결정됩니다.

 

✅ 이진트리(Binary Tree)

이진트리자식의 노드의 갯수가 두개 이하인 트리를 말합니다.

 

💠이진트리의 분류

이진트리의 분류

 

  • 정 이진 트리(full binary tree)
    : 자식 노드가 0 또는 2개인 이진 트리

  • 완전 이진 트리(complete binary tree)
    : 왼쪽에서부터 채워져 있는 이진 트리
    (마지막 레벨을 제외하고는 모든 레벨이 완전히 채워져 있으며, 마지막 레벨의 경우 왼쪽부터 채워져 있는 트리)

  • 변질 이진 트리(degenerate binary tree)
    : 자식 노드가 하나밖에 없는 이진 트리

  • 포화 이진 트리(perfect binary tree)
    : 모든 노드가 꽉 차 있는 이진 트리. 반드시 노드의 개수가 2^(h+1)-1 의 개수를 가진다. (h=높이)

  • 균형 이진 트리(balanced binary tree)
    : 왼쪽과 오른쪽 노드의 높이 차이가 1 이하인 이진 트리

 

이진탐색트리(Binary Search Tree)

탐색을 위한 이진 트리의 일종으로 특수한 노드 값을 가지는 형태의 이진 트리입니다.

 

이진 탐색 트리에서 노드의 값이 저장되는 구조는 이렇습니다.

  • left node에는 부모노드보다 작은 값이 저장됩니다.
  • right node에는 부모노드보다 큰 값이 저장됩니다.
  • 모든 노드는 중복된 값을 가지지 않습니다.

이진 탐색 트리

 

- 일반적인 비선형적인 구조로 잘 만들어진 이진 탐색 트리는 O(log n)의 시간복잡도를 가집니다.

그러나 이진 탐색트리는 데이터의 삽입 순서에 따라서 선형적인 구조를 가지게 될 수도 있어 시간복잡도가 변경되고, 최악읜 경우 O(n)의 시간복잡도를 가지게 될 수도 있습니다.

(여기서 트리는 일반적으로 비선형 구조, 하지만 이진트리에서는 특이케이스로 선형적인 구조를 가질 수도 있음)

 

 

✅ AVL트리

AVL트리이진 탐색 트리의 일종으로 이진 탐색 트리에 균형잡힌 트리를 유지하는 자료 구조입니다.

 

이진 탐색 트리와 같은 특징을 지니고 있지만, AVL트리는 균형 트리의 특징을 가져 서브트리의 좌, 우 높이가 1(-1, 0, 1)을 초과하지 않도록 동작합니다.

 

AVL 트리

 

만약 AVL트리에서 균형이 무너지게 된다면, 새로운 노드를 추가하거나 왼쪽이나 오른쪽으로 돌리는 회전을 통해 균형을 유지합니다.

 

균형을 잃은 상황(예시)

        A
         \
          B
           \
            C
             \
              D

 

 

균형을 맞춘 결과(예시)

          B
        /   \
       A     C
            / \
           D   (E)

 

- 이런 방식으로 AVL트리는 항상 균형을 맞춰 높이를 유지하기 때문에 평균이든 최악이든 시간복잡도는 O(log n)을 가지게 됩니다.

 

 

✅ 그 외 트리들

  • 트라이(Trie)
  • 스플레이 트리(Splay tree)

 

 

 

 

.Reference

https://velog.io/@kwontae1313/%ED%8A%B8%EB%A6%ACTree%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

 

트리(Tree)에 대해서 알아보자

이전 포스팅 그래프(Graph)에 이어서 이번엔 트리(Tree)에 대해서 알아보자 트리(Tree)란? 트리는 그래프의 하위 개념 중 하나이다. 트리를 그래프의 특징에 따라서 정의하게 된다면. > 트리는 방향성

velog.io