🔷 개념
비선형 구조
1:N
관계를 가지는 자료구조계층형
자료구조🔷 정의
한 개 이상의 노드
로 이루어진 유한 집합
루트
(root)라 한다.이들 T1, ..., TN은 각각 하나의 트리가 되며(재귀적 정의) 루트의 부 트리(subtree)
라 한다.
🌟 용어 정리
노드(node)
: 트리의 원소
간선(edge)
: 노드를 연결하는 선, 부모 노드와 자식 노드를 연결
루트 노드(root node)
: 트리의 시작 노드
형제 노드(sibling node)
: 같은 부모 노드의 자식 노드들
조상 노드
: 간선을 따라 루트 노드까지 이르는 경로에 있는 모든 노드들
서브 트리(subtree)
: 부모 노드와 연결된 간선을 끊었을 때 생성되는 트리
자손 노드
: 서브 트리에 있는 하위 레벨의 노드들
🔷 차수(degree)
단말 노드(리프 노드)
: 차수가 0인 노드 (자식 노드가 없는 노드)🔷 높이
🔷 정의
🔷 특성
🔷 종류
포화 이진 트리(Perfect Binary Tree)
높이 3일 때 2^3+1 - 1 = 15 개의 노드
완전 이진 트리(Complete Binary Tree)
편향 이진 트리(Skewed Binary Tree)
🔷 표현
배열
🌟 노드 번호의 성질
1) 노드 번호가 i인 노드의 부모 노드 번호: i/2(나머지 내림)
2) 노드 번호가 i인 노드의 왼쪽 자식 노드 번호: 2*i
3) 노드 번호가 i인 노드의 오른쪽 자식 노드 번호: 2*i + 1
4) 레벨 n의 노드 번호 시작 번호: 2^n
연결리스트
🔷 순회
전위 순회(preorder traversal)
: VLR부모 노드 방문 후, 자식 노드를 좌, 우 순서로 방문한다.
1) 현재 노드 n을 방문 - V
2) 현재 노드 n의 왼쪽 서브 트리로 이동 - L
3) 현재 노드 n의 오른쪽 서브트리로 이동 - R
중위 순회(inorder traversal)
: LVR후위 순회(postorder traversal)
: LRV💡 L-R 의 순서는 절대 바뀌지 않는다. 따라서 V의 위치에 따라 방법이 바뀐다.
🖥 자 배열로 구현 드가자
public class dailyClass {
static char [] arr = new char[] {' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', ' ', ' ', 'H', 'I'};
static int N = arr.length;
public static void main(String[] args) {
preorder(1);
System.out.println();
inorder(1);
System.out.println();
postorder(1);
}
// 전위 순회
// i: 현재 방문 중인 노드 번호
public static void preorder(int i) {
// 유효한 노드 check
if(i < N) {
if(arr[i] != ' ')
System.out.print(arr[i] + " "); // V
preorder(i*2); // L
preorder(i*2+1); // R
}
}
// 중위 순회
// i: 현재 방문 중인 노드 번호
public static void inorder(int i) {
// 유효한 노드 check
if(i < N) {
inorder(i*2); // L
if(arr[i] != ' ')
System.out.print(arr[i] + " "); // V
inorder(i*2+1); // R
}
}
// 후위 순회
// i: 현재 방문 중인 노드 번호
public static void postorder(int i) {
// 유효한 노드 check
if(i < N) {
postorder(i*2); // L
postorder(i*2+1); // R
if(arr[i] != ' ')
System.out.print(arr[i] + " "); // V
}
}
}