https://www.acmicpc.net/problem/5639
분할정복법 -> 전위를 후위로 바꾸니 왼쪽, 오른쪽, 노드를 출력하게 재귀 함수를 사용하면 된다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
public class Main {
static BufferedWriter bw;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 전위 순회 값 => 트리 생성 => 후위 순위 값 출력
// null아닐때까지 입력 받기
String s;
Node root = new Node(Integer.parseInt(br.readLine()));
while (true) {
s = br.readLine();
if(s == null || s.equals("")) break;
root.insert(Integer.parseInt(s));
}
post(root);
bw.flush();
bw.close();
br.close();
}
static class Node{
int data;
Node left, right;
Node(int data){
this.data=data;
this.left=null;
this.right=null;
}
void insert(int n){
if(n < this.data) {
if(this.left == null)
this.left = new Node(n);
else this.left.insert(n);
}
else{
if(this.right == null)
this.right = new Node(n);
else this.right.insert(n);
}
}
}
public static void post(Node node) throws Exception{
if(node == null) return;
post(node.left);
post(node.right);
bw.write(node.data+"\n");
}
}
==
insert 다른 방식
void insert(Node node, int val){
if(node == null){
return new Node(val);
}
if(val < node.val){
node.left = insert(node.left, val);
}
else {
node.right = insert(node.right, val);
}
return node;
}