백준 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;
		}
	}
}
