카테고리 없음

자료구조 트리 - 개념과 구조

김준표 2025. 11. 8. 16:11

트리(Tree)는 계층적 구조를 가진 비선형 자료구조이다. 일반적으로 나무를 거꾸로 뒤집은 형태로, 하나의 노드에서 시작해 여러 하위 노드로 가지처럼 뻗어나가는 구조이다.

 

비선형 / 계층적 구조란?

- 비선형은 데이터가 일렬로 나열되지 않은 구조를 뜻한다. 배열이나 연결 리스트처럼 순서대로 하나씩 연결된 선형 구조와 달리 한 노드가 여러 노드와 연결될 수 있는 구조이다.

- 계층적 구조란 '위와 아래' 로 구분되어 '부모-자식'로 연결된 구조를 뜻한다. 상위 개념에서 하위 개념으로 내려가는 단계적 구조이다. 

 

 

선형구조와 비선형 구조의 차이

 

정의 데이터가 일렬(1차원)로 나열 데이터가 계층적, 네트워크형으로 연결됨
구조 형태 앞뒤(순차) 관계 부모-자식, 여러 연결 관계
대표 예시 배열, 리스트, 스택, 큐 트리, 그래프
접근 방식 순차적으로 접근 계층적(큰 구조를 위에서부터 아래 단계로 차근차근 나누어 살펴보는 방식)으로 접근

 

TREE / 뒤집어 놓은 나무


용어

  • 루트: 부모가 없는 최상위 노드
  • 부모: 노드A에서 노드B로 가는 간선이 있을 때 A를 B의 부모라고 한다.
  • 자식: 노드A에서 노드B로 가는 간선이 있을 때 B를 A의 자식이라고 한다.
  • 형제: 같은 부모를 갖는 노드들
  • 단말노드: 자식이 없는 노드 
  • 깊이/레벨: 루트에서 해당 노드으로 가는 최단 경로의 길이
  • 높이: 노드들의 깊이의 최댓값
  • 너비: 각 레벨에 속한 노드의 수의 최댓값
  • 내부노드 : 하나 이상의 자식 노드를 가지고 있는 노드

트리 종류 

평향트리 : 모든 노드들이 자식을 하나만 가진 트리이다

왼쪽방향으로만 자식을 하나씩만 가질 때 왼쪽 평향 트리, 오른쪽으로만 방향을 가질 때 오른쪽 평향 트리라고 한다.

 

이진트리(Binary tree)

각 노드가 최대 2개의 자식 노드를 가지는 트리 구조이다.  즉, 하나의 노드는 왼쪽 자식과 오른쪽 자식을 가질 수 있다.

 최대 노드의 개수에 따라 n진트리로 종류가 달라진다.

 

포화이진트리(full binary tree)

포화이진트리는 모든 레벨이 꽉 차 있으며 모든 단말노드가 동일한 레벨에 존재하는 이진트리이다.
즉, 트리의 모든 내부 노드가 자식 노드를 정확히 두 개씩 가지고 단말노드는 모두 같은 층에 위치한 구조이다.

포화이진트리

완전이진트리(full binary tree)

완전이진트리는 마지막 레벨을 제외한 모든 레벨이 꽉 차 있으며 마지막 레벨의 노드들이 왼쪽부터 순서대로 채워져 있는 이진트리이다.

Q. 완전이진트리는 배열로 구현할 수 있는데, 왜 BST는 배열로 구현하기 어려울까?

완전이진트리는 노드가 왼쪽부터 빈틈없이 채워지는 구조라 인덱스로 부모·자식의 위치를 정확히 계산할 수 있지만,
BST는 삽입 순서에 따라 모양이 달라지고 빈 공간이 불규칙하게 생기기 때문에 배열 인덱스 구조를 유지하기 어려워서 배열로 구현하기 적합하지 않다.

 

특징

 

  • 마지막 레벨의 노드는 왼쪽부터 연속적으로 채워진다.
  • 가운데나 오른쪽이 비어 있으면 안 된다.
  • 트리의 높이가 최소화되어 효율적인 메모리 구조를 가진다.

완전이진트리

 

 

이진탐색트리(Binary Search Tree, BST)

이진탐색트리는 왼쪽 서브트리에는 작은 값이, 오른쪽 서브트리에는 큰 값이 저장되는 정렬된 이진트리이다.

 

기본 규칙

  1. 왼쪽 자식 노드의 값은 부모보다 작아야 한다.
  2. 오른쪽 자식 노드의 값은 부모보다 커야 한다.
  3. 중복값은 일반적으로 허용하지 않는다.

사용 사례

운영체제에서 폴더와 파일을 관리할 때 트리 구조를 사용한다. 루트 디렉터리에서 하위 폴더와 파일이 뻗어나가는 형태이므로 트리 구조와 동일하다. 

출처 : https://webdir.tistory.com/101