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

총평

후기

개선할 점