Tree 알고리즘
Tree 알고리즘 개념 설명
Tree 알고리즘
트리(Tree) 개념 정리
1. 트리(Tree)란?
- 부모/자식 관계를 가지는 계층적 구조이다.
- 노드는 하나 이상의 자식(Child)을 가질 수 있다.
- 트리에서 자식이 없는 노드를 리프(Leaf) 노드라고 한다.
2. 이진 트리(Binary Tree)
- 각 노드는 최대 2개의 자식 노드를 가질 수 있는 트리이다.
이진 탐색 트리(Binary Search Tree, BST)
- 왼쪽 서브트리의 모든 노드는 부모보다 작은 값을 가진다.
- 오른쪽 서브트리의 모든 노드는 부모보다 큰 값을 가진다.
완전 이진 트리(Complete Binary Tree)
- 모든 노드가 왼쪽부터 차례로 채워져 있는 트리이다.
- 마지막 레벨의 노드들은 가능한 왼쪽부터 채워져 있어야 한다.
포화 이진 트리(Full Binary Tree)
- 모든 노드가 자식 노드를 0개 또는 2개 갖는 트리이다.
3. 이진 트리 순회(Binary Tree Traversal)
중위 순회(Inorder Traversal) - Left, Root, Right
- 루트 노드에서 시작한다.
- 왼쪽 서브트리로 이동한다.
- 왼쪽 서브트리의 가장 끝 노드까지 도달하면 해당 노드를 출력한다.
- 부모 노드를 출력한다.
- 오른쪽 서브트리를 출력한다.
예시 트리
(1)
(2) (3)
(4) (5)
순회 결과: 4 -> 2 -> 5 -> 1 -> 3
전위 순회(Preorder Traversal) - Root, Left, Right
- 루트 노드를 출력한다.
- 왼쪽 서브트리로 이동하며 노드를 출력한다.
- 왼쪽 서브트리의 리프 노드까지 도달하면 오른쪽 서브트리로 이동하여 출력한다.
예시 트리
(1)
(2) (3)
(4) (5)
순회 결과: 1 -> 2 -> 4 -> 5 -> 3
후위 순회(Postorder Traversal) - Left, Right, Root
- 왼쪽 서브트리의 리프 노드까지 이동하여 출력한다.
- 오른쪽 서브트리로 이동하여 리프 노드를 출력한다.
- 부모 노드를 출력한다.
예시 트리
(1)
(2) (3)
(4) (5)
순회 결과: 4 -> 5 -> 2 -> 3 -> 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
class Node {
int data;
Node left;
Node right;
}
class Tree {
public Node root;
Tree() {
root = new Node();
}
public void setRoot(Node node) {
this.root = node;
}
public Node getRoot() {
return this.root;
}
public Node makeNode(Node left, int data, Node right) {
Node node = new Node();
node.left = left;
node.data = data;
node.right = right;
return node;
}
public void inorder(Node node) {
if (node == null) {
return;
}
inorder(node.left);
System.out.println(node.data);
inorder(node.right);
}
public void preorder(Node node) {
if (node == null) {
return;
}
System.out.println(node.data);
preorder(node.left);
preorder(node.right);
}
public void postorder(Node node) {
if (node == null) {
return;
}
postorder(node.left);
postorder(node.right);
System.out.println(node.data);
}
}
/*
(1) (2) (3) (4) (5)
* */
public class test2 {
public static void main(String[] args) {
Tree t = new Tree();
Node n4 = t.makeNode(null, 4, null);
Node n5 = t.makeNode(null, 5, null);
Node n2 = t.makeNode(n4, 2, n5);
Node n3 = t.makeNode(null, 3, null);
Node n1 = t.makeNode(n2, 1, n3);
t.inorder(n1);
System.out.println("------");
t.preorder(n1);
System.out.println("------");
t.postorder(n1);
}
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.