문제링크 : https://www.acmicpc.net/problem/1991
Note
이 문제를 풀기위한 설명은 트리(Tree)와 이진트리(Binary Tree) POST를 참고하면 된다.
첫 번째는 줄에는 노드의 개수이고 그 다음줄 부터 하나씩 읽어가면서 노드 , 왼쪽 자식노드, 오른쪽 자식노드 순으로 노드를 추가하면서 이진트리를 그성하고 pre-order, in-order, post-porder 순으로 순회하여 결과를 출력하면 된다.
첫 번째는 줄에는 노드의 개수이고 그 다음줄 부터 하나씩 읽어가면서 노드 , 왼쪽 자식노드, 오른쪽 자식노드 순으로 노드를 추가하면서 이진트리를 그성하고 pre-order, in-order, post-porder 순으로 순회하여 결과를 출력하면 된다.
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
import java.util.ArrayDeque;
import java.util.Queue;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.function.Consumer;
public class Main {
public static class BTree<T extends Comparable<T>> {
public Node root;
public static class Node<T extends Comparable<T>> {
public T data ; // 노드의 값.
public Node<T> parent ; // 부모 노드를 가리킨다.
public Node<T> left ; // 왼쪽 자식노드 (left child node)
public Node<T> right ; // 오른쪽 자식노드(right child node)
Node(T data) {
this.data = data;
}
public Node(Node<T> parent, T data ) {
this.data = data;
this.parent = parent;
this.left = null;
this.right = null;
}
}
public Node addLeft(Node parent, T data) {
Node node = new Node(parent, data);
parent.left = node;
return node;
}
public Node addRight(Node parent, T data) {
Node node = new Node(parent, data);
parent.right = node;
return node;
}
public Node search(T data) {
// level order 로 찾는다.
if(root == null) {
return null;
}
final Queue<Node> queue = new ArrayDeque<>();
queue.add(root);
while(!queue.isEmpty()) {
Node node = queue.poll();
return node;
}
}
return null;
}
public void preorderTraversal(Node node, Consumer<Node> consumer) {
if(node == null)
return;
preorderTraversal(node.left, consumer);
preorderTraversal(node.right, consumer);
}
public void inorderTraversal(Node node, Consumer<Node> consumer) {
if(node == null)
return;
// left -> root -> right
inorderTraversal(node.left, consumer);
inorderTraversal(node.right, consumer);
}
public void postorderTraversal(Node node, Consumer<Node> consumer) {
if(node == null)
return;
// left -> right -> root
postorderTraversal(node.left, consumer);
postorderTraversal(node.right, consumer);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
BTree btree = new BTree();
for(int i = 0 ; i < N ; i++) {
String[] nodes = br.readLine().split(" ");
btree.search(nodes[0]) ;
if(!nodes[1].equals(".")) btree.addLeft(node, nodes[1]);
if(!nodes[2].equals(".")) btree.addRight(node, nodes[2]);
}
StringBuilder builder = new StringBuilder();
@Override
}
});
builder.append("\n");
@Override
}
});
builder.append("\n");
@Override
}
});
builder.append("\n");
System.out.println(builder.toString());
}
}
Colored by Color Scripter
|
'코딩테스트(Coding Test) > 백준(Baekjoon OJ)' 카테고리의 다른 글
백준 2947 - 나무조각 (버블정렬) (0) | 2019.07.03 |
---|---|
백준 7785 - 회사에 있는 사람 (0) | 2019.06.28 |
백준 1620 - 나는야 포켓몬 마스터 이다솜 (0) | 2019.06.28 |
백준 5639 - 이진 검색 트리 (0) | 2019.06.28 |
백준 1920 - 수 찾기 (0) | 2019.06.27 |