백준 5639 - 이진 검색 트리
Updated:
Java
5639 번 - 이진 검색 트리
문제
접근 방법
트리를 구현한 뒤에, 후위 순회를 통해 결과를 출력한다.
코드
import java.util.*;
import java.io.*;
public class Main {
static int n, result;
static StringBuilder sb;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input;
Node startNode = new Node(stoi(br.readLine()));
while(true) {
input = br.readLine();
// 문제에서 종료 조건이 없으므로, 아래 조건 문으로 대체
if(input == null || input.equals("")) {
break;
}
int num = stoi(input);
insertNode(num , startNode);
}
sb = new StringBuilder();
postOrder(startNode);
System.out.println(sb.toString());
br.close();
}
// 후위 순회로 출력
private static void postOrder(Node curNode) {
if(curNode == null)
return;
postOrder(curNode.getLeft());
postOrder(curNode.getRight());
sb.append(curNode.getVal()).append("\n");
}
private static void insertNode(int num, Node curNode) {
if(num < curNode.getVal()) {
// 왼쪽 노드가 비어있을 때
if(curNode.getLeft() == null) {
curNode.setLeft(new Node(num));
}
else {
insertNode(num, curNode.getLeft());
}
}
else {
if(curNode.getRight() == null) {
curNode.setRight(new Node(num));
}
else {
insertNode(num, curNode.getRight());
}
}
}
static int stoi(String str) {
return Integer.parseInt(str);
}
static class Node{
Node left;
Node right;
int val;
Node(int val){
this.val = val;
left = null;
right = null;
}
void setLeft(Node n) {
this.left = n;
}
void setRight(Node n) {
this.right = n;
}
void setVal(int n) {
this.val = n;
}
public Node getLeft() {
return left;
}
public Node getRight() {
return right;
}
int getVal() {
return val;
}
}
}