본문 바로가기

알고리즘

백준 - 5639 이진 검색 트리(Java)

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

 

5639번: 이진 검색 트리

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

www.acmicpc.net

 

탐색 문제입니다.

 

전위 탐색 정보를 사용하여, 후위 탐색 정보를 출력해야 합니다.

전위 탐색은 다음과 같습니다.

void pre(Node node){
    print(node);
    pre(node.left);
    pre(node.right);
}

즉, 전위 탐색은 현재 노드를 출력하고 좌측부터 탐색을 하는 방법입니다.

때문에, 입력에서 주어지는 첫 번째 입력은 루트 노드라는 것을 알 수 있습니다.

루트 노드 이후에 주어지는 입력은 루트 노드의 하위 노드들로, 이진 검색 트리 조건에 맞에 삽입(insert)하면 됩니다.

 

 

[구현 코드]

import java.io.*;

public class Main {

    private static class Node {
        int number;
        Node left, right;

        public Node(int number) {
            this.number = number;
        }

        void insert(int input) {
            // 삽입 노드가 현재 노드보다 작을 때(왼쪽 삽입)
            if (this.number > input) {
                if(this.left == null) {
                    this.left = new Node(input);
                }else{
                    this.left.insert(input);
                }
            }
            // 삽입 노드가 현재 노드보다 클 때(오른쪽 삽입)
            else{
                if(this.right == null){
                    this.right = new Node(input);
                }else {
                    this.right.insert(input);
                }
            }

        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // 루트 노드
        Node node = new Node(Integer.parseInt(br.readLine()));

        // 하위 노드
        while (true) {
            String read = br.readLine();
            if (read == null || read.equals("")) break;

            int input = Integer.parseInt(read);
            node.insert(input);
        }

        post(node, bw);

        bw.flush();
        bw.close();
        br.close();
    }

    // 후위 탐색
    private static void post(Node node, BufferedWriter bw) throws IOException {
        if(node.left != null) post(node.left, bw);
        if(node.right != null) post(node.right, bw);
        bw.write(node.number + System.lineSeparator());
    }
}

'알고리즘' 카테고리의 다른 글

프로그래머스 - 귤 고르기(Java)  (0) 2022.11.30
백준 - 1865 웜홀(Java)  (0) 2022.11.30
백준 - 2230 수 고르기(Java)  (0) 2022.11.28
백준 - 17609 회문(Java)  (0) 2022.11.28
백준 - 17406 배열 돌리기4(Java)  (0) 2022.11.27