재귀 연습하려고 풀었다가 이진트리까지 공부했다..^^
입력 | 출력 |
7 A B C B D . C E F E . . F . G D . . G . . |
ABDCEFG DBAECFG DBEGFCA |
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
static StringBuilder ans = new StringBuilder();
static class Node {
char data;
Node left, right;
Node(char data) {
this.data = data;
}
}
static class Tree {
Node root;
public void addNode(char data, char left, char right) {
if (root == null) root = new Node(data);
addNode(root, data, left, right);
}
public void addNode(Node node, char data, char left, char right) {
if (node == null) return;
else if (node.data == data) {
if (left != '.') node.left = new Node(left);
if (right != '.') node.right = new Node(right);
} else {
addNode(node.left, data, left, right);
addNode(node.right, data, left, right);
}
}
public void preorder(Node node) {
if (node != null) {
ans.append(node.data);
preorder(node.left);
preorder(node.right);
}
}
public void inorder(Node node) {
if (node != null) {
inorder(node.left);
ans.append(node.data);
inorder(node.right);
}
}
public void postorder(Node node) {
if (node != null) {
postorder(node.left);
postorder(node.right);
ans.append(node.data);
}
}
}
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(in.readLine());
Tree tree = new Tree();
char[] temp;
for (int i = 0; i < n; i++) {
temp = in.readLine().replaceAll(" ", "").toCharArray();
tree.addNode(temp[0], temp[1], temp[2]);
}
in.close();
tree.preorder(tree.root);
ans.append("\n");
tree.inorder(tree.root);
ans.append("\n");
tree.postorder(tree.root);
System.out.println(ans);
}
}
이진 트리를 이해는 했는데, 입력받아서 구현하는 방법이 아이디어가 떠오르지 않았다. 검색을 해서 공부해보니 method를 통해서 입력 받고 node 생성하는 방법, if로 left, right 값을 확인하고 node 생성하기 등의 아이디어를 받아올 수 있었다. 여기서 좀 더 간결하게 발전 시켜 보고 싶어서 괜히 method overloading으로 구현해봤다. 후후
'온라인 저지 > BOJ' 카테고리의 다른 글
[BOJ/Java] 2493 탑 (0) | 2022.02.09 |
---|---|
[BOJ/Java] 1966 프린터 큐 (0) | 2022.02.09 |
[BOJ/Java] 17478 재귀함수가 뭔가요? (0) | 2022.02.03 |
[BOJ/Node.js] 1786 찾기 (0) | 2022.01.30 |
[BOJ/Java] 2309 일곱 난쟁이 (0) | 2022.01.23 |
댓글