알고리즘

백준 5639번 이진 검색 트리 (JAVA)

박카스마시며코딩 2023. 5. 21. 11:40

https://www.acmicpc.net/problem/5639

 

5639번: 이진 검색 트리

트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다

www.acmicpc.net

 

저는 재귀를 통해 문제를 해결하였습니다.

먼저 루트값이 나오게 되고, 이후 이 루트값보다 낮다면 왼쪽, 높다면 오른쪽에 존재하기 때문에 이 기준으로 둘을 나누고, 현재 값을 출력해 나가면서 문제를 해결하였습니다.

 

package BOJ.etc;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class BOJ_5639 {
    private static final int MAX_SIZE = 10_000;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] input = new int[MAX_SIZE+1];
        int index = 0;
        String str;
        while(true){
            str = br.readLine();
            if(str == null || str.equals("")){
                break;
            }
            input[index++] = Integer.parseInt(str);
        }
        postOrder(0,index-1,input);
    }

    private static void postOrder(int start, int end, int[] input) {
//        System.out.println(start+" "+end);
        if(start > end){
            return ;
        }
        int value = input[start];
        int index = start+1;
        while(index <= end){
            if(input[index] < value){
                index++;
            }else{
                break;
            }
        }
        postOrder(start+1,index-1,input);
        postOrder(index,end,input);
        System.out.println(value);
    }
}