Problem
https://www.acmicpc.net/problem/5639
Think
-
이진검색트리를 직접 구현하면 될것 같다.
-
직접 해결한 문제.
Solved Code
import java.io.BufferedReader;
import java.io.InputStreamReader;
/**
* Created by iyoungman on 2020-04-28.
*/
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
TreeNode root = new TreeNode(Integer.parseInt(br.readLine()));//(1)
String line = "";
while (true) {
line = br.readLine();
if (line == null || line.length() == 0) {
break;
}
//(2)
root = root.add(root, Integer.parseInt(line));
}
postOrder(root);
}
//(3)
private static void postOrder(TreeNode root) {
if (root.left != null) {
postOrder(root.left);
}
if (root.right != null) {
postOrder(root.right);
}
System.out.println(root.data);
}
}
class TreeNode {
int data;
TreeNode left;
TreeNode right;
public TreeNode(int data) {
this.data = data;
}
public TreeNode add(TreeNode currentNode, int data) {
if (currentNode == null) {
return new TreeNode(data);
}
if (currentNode.data > data) {
currentNode.left = add(currentNode.left, data);//왼쪽 트리에 data 추가
} else if (currentNode.data < data) {
currentNode.right = add(currentNode.right, data);//오른쪽 트리에 data 추가
}
return currentNode;
}
}
Solved Process
1) 문제에서 전위 순회 한 결과가 입력으로 주어진다. 따라서 첫번째 입력값을 트리의 Root 노드로 볼 수 있다.
2) Root 노드를 기준으로 입력된 값을 삽입한다.
삽입은 크게 3가지로 나뉜다.
2.1 현재 노드가 할당되지 않은 노드라면 할당 후에 Return 한다.
2.2 현재 노드가 할당되어 있으며, 새로운 입력값이 현재 노드의 값보다 작다면 왼쪽 서브 노드에 삽입한다.
2.3 현재 노드가 할당되어 있으며, 새로운 입력값이 현재 노드의 값보다 크다면 오른쪽 서브 노드에 삽입한다.
특히, 2.2 와 2.3은 재귀적으로 호출되며 2.1을 만나 Return 한다.
3) 후위 순회를 한다.
이때, 자식 노드가 Null인지 검증하며 순회한다.