그래프의 일종으로 두 노드 사이의 하나의 간선만 연결되어 있는 최소 연결과 계층 형태의 비선형 자료 구조

트리의 구조 및 용어
- 노드 (node) : 하나 이상의 값을 갖는 객체 단위
- 간선(Edge) : 두 노드를 연결하는 선
- 루트 노드(Root Node) : 부모가 없는 최상위 노트 → 시작 위치
- 단말 노드(Leaf Node) : 자식이 없는 노드
- 부모 노트(Parent node) : 특정 Sub-Tree 내에서 상위 노드
- 자식 노트(Child node) : 특정 Sub-Tree 내에서의 하위 노트
- Sub-Tree : Parent node - Child node 를 묶음(표에서 5, 3, 6의 묶음을 말한다)
- 형제(Sibling) : 부모가 없는 최상위 노드
트리 특징
주요 특징
‘최소 연결 트리’로 불림, 계층 모델, 방향 비순환 그래프(DAG: Directed Acyclic Graph) 한 종류
트리 종류
- 이진 트리
- 이진 탐색 트리
- AVL 트리
- 힙(Heap)

- 노트 크기(Size) : 자신을 포함한 모든 자손 노드의 개수
- 노드 깊이(Depth) : 루트에서 특정 노드에 도달하기 위한 간선의 개수
- 노드 레벨(level) : 트리의 특정 깊이를 가지는 노드의 집합 → 루트 기준으로 Level 0인 경우도 있다.
- 노드 차수(degree) : 노드가 지닌 가지의 수
- 트리 차수(tree degree) : 트리의 최대 차수
- 트리 높이(height) : 루트 노드에서 가장 깊숙이 있는 노드의 깊이
트리 순회
트리 구조에서 각각의 노드를 정확히 한 번씩 체계적인 방법으로 방문하는 과정
필요 용어
- N(Node) : 해당 노드를 방문
- L(Left) : 왼쪽 서브 트리로 이동
- R(Right) : 오른쪽 서브 트리로 이동
순회 방식
- 전위 순회 (Pre-order) : N - L - R
- 중위 순회 (In-order) : L - N - R
- 후위 순회 (Post-order) : L - R - N
- 층별 순회 (Level-order) : 낮은 Level부터 순차적으로 순회(Level 0 → Level N)
전위 순회(Pre-order)

- 전위 순회 방법 : N - L - R
- 노드를 방문
- 왼쪽 서브 트리를 전위 순회
- 오른쪽 서브 트리를 전위 순회
- 방문 순서 : F → B → A → D → C → E → G → I → H
- 의사 코드(pseudo-code)
preorder(node)
print node.value
if node.left != null then preoder(node.left)
if node.right != null then preoder(node.right)
중위 순회(In-order)

- 중위 순회 방법 : L - N - R
- 왼쪽 서브 트리를 중위 순회
- 현재 노드를 방문
- 오른쪽 서브 트리를 중위 순회
- 방문 순서 : A → B → C → D → E → F → G → H → I
- 의사 코드(pseudo-code)
inorder(node)
if node.left != null then inorder(node.left)
print node.value
if node.right != null then inorder(node.right)
층별 순회(Level-order)

- 층별 순회 방법 : 낮은 Level부터 순차적으로 순회(Level 0 → Level N)
- root 노드 방문
- Level 증가
- 왼쪽에서 오른쪽 순으로 방문
- 방문 순서 : F → B → G → A → D → I → C → E → H
- 의사 코드(pseudo-code)
levelorder(node)
q.enqueue(root)
while noe q.empty do
node := q.denqueue()
print node.value
if node.left != null then enqueue(node.left)
if node.right != null then enqueue(node.right)
후위 순회(Post-order)

- 후위 순회 방법 : L - R - N
- 왼쪽 서브 트리를 후위 순회
- 오른쪽 서브 트리를 후위 순회
- 현재 노드 방문
- 방문 순서 : A → C→ E → D → B → H→ I → G → F
- 의사 코드(pseudo-code)
postorder(node)
if node.left != null then postorder(node.left)
if node.right != null then postorder(node.right)
print node.value