트리

트리의 개념

  • 논리적 계층이 있는, 계층적 관계를 표현하는 비선형 자료구조.
  • 노드(Node)와 간선(Edge)로 구성되어있다.
  • 각 노드는 부모 - 자식 관계를 통해 연결된다.
  • 루트 노드로부터 시작하여 여러 자식 노드를 가질 수 있다.

트리 자료구조의 장점

(1) 구조화된 자료를 한눈에 볼 수 있음
(2) 효율적인 탐색 및 삽입
(3) 명확한 계층적 데이터 표현
(4) 유연한 데이터 구조
(5) 효율적 데이터 정렬
(6) 메모리 효율성
등..

트리의 구성 요소와 표현 방법

트리의 구성 요소

구성 요소 영문명칭 설명
노드 node 트리의 기본 구성 요소로, 데이터를 저장하거나 나른 노드와 연결하는 단위
부모노드 parent node 특정 노드와 직접 연결된 바로 상위 노드
자식노드 child node 특정 노드와 직접 연결된 바로 하위 노드
루트노드 root node 트리의 최상위 노드(부모가 없는 노드)
간선 edge 노드 간의 관계를 나타내는 연결선. 한 간선은 두 노드를 연결한다.
차수 degree 하나의 노드가 가진 자식 노드의 개수
서브트리 subtree 특정 노드로부터 시작되는(=특정 노드를 루트로 하는) 트리의 일부 구조
잎 노드   트리의 맨 끝에 있으면서, 자신의 서브트리를 갖지 않는 노드
진입 차수 in-degree 특정 노드로 들어오는 간선의 수
진출 차수 out-degree 특정 노드에서 나가는 간선의 수
내부 노드 internal node 루트 노드와 잎 노드를 제외한 나머지 노드
형제 sibling 같은 부모 노드를 공유하는 노드
경로 path 한 노드가 다른 노드로 가는 노드 간의 연결 관계
경로의 길이 path length 경로를 따라 이동할 때 지나가는 간선의 개수
레벨 leve 트리 내의 특정 노드가 루트 노드에서부터 떨어진 거리(깊이)

트리의 표현 방법

패스

트리의 추상 자료형

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ADT

1. 트리 객체에 대한 정의
- 루트 노드를 갖는 유한 리스트  

2. 트리의 연산  
(1) Tree Create() ::= 트리를 생성하고, 루트 노드를 가리키는 포인터를 반환한다.
(2) Destroy(Tree) ::= 사용하지 않는 트리의 기억 장소를 시스템에 반환한다.
(3) Tree Copy_Tree(Tree) ::= 트리를 복사하고, 새로 생성한 트리의 루트 노드를 가리키는 포인터를 반환한다.
(4) Insert(n) ::= 트리에 노드 n 삽입한다.
(5) Delete() ::= 트리에서 노드를 삭제한다. 보통 재구성 단계를 포함한다.
(6) Search() ::= 트리에서 특정 키값을 갖는 노드를 찾는다. 찾았다면 true, 못찾았다면 false 반환한다.
(7) Traverse() ::= 트리를 순회하고, 방문 순서대로 값을 반환한다.
(8) Root() ::= 루트 노드 값을 반환한다.
(9) Parent(n) ::= 노드 n 부모(값이나 포인터) 반환한다. n 루트이면 오류를 반환.
(10) Children() ::= 노드 n 자식( 혹은 포인터) 반환한다. n 잎이면 오류를 반환한다.
(11) IsRoot(n) ::= 노드 n 루트이면 true, 아니면 false 반환한다.
(12) IsInternal(n) ::= 노드 n 내부 노드이면 true, 아니면 false 반환한다.
(13) IsLeaf(n) ::= 노드 n 잎이면 true, 아니면 false 반환한다.
(14) IsEmpth() ::= 트리가 비었다면 true, 아니면 false 반환한다.
(15) Replace(n,m) ::= 노드 n 노드 m으로 바꾼다.

트리 자료구조의 종류

트리 자료구조
├── 일반 트리 (General Tree)
├── 이진 트리 (Binary Tree)
│   ├── 포화 이진 트리 (Full Binary Tree)
│   ├── 완전 이진 트리 (Complete Binary Tree)
│   ├── 편향 이진 트리 (Skewed Binary Tree)
│   ├── 이진 검색 트리 (Binary Search Tree, BST)
│   ├── 균형 트리 (Balanced Tree)
│   │   ├── AVL 트리 (AVL Tree)
│   │   └── 레드-블랙 트리 (Red-Black Tree)
│   └── **스레드 트리 (Threaded Tree)**  <-- 여기에 위치
├── 힙 (Heap)
│   ├── 최대 힙 (Max Heap)
│   └── 최소 힙 (Min Heap)
├── N-진 트리 (N-ary Tree)
├── 트라이 (Trie, Prefix Tree)
├── 세그먼트 트리 (Segment Tree)
├── 스패닝 트리 (Spanning Tree)
├── B-트리와 B+트리
│   ├── B-트리 (B-Tree)
│   └── B+트리 (B+Tree)
├── 이진 인덱스 트리 (Fenwick Tree)
├── 결정 트리 (Decision Tree)
└── 컴프레션 트리
    ├── 서픽스 트리 (Suffix Tree)
    └── 라딕스 트리 (Radix Tree)

Reference

자료구조 (강태원, 정광식 공저)