Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

전공공부

[BOJ_5639] 이진 검색 트리 본문

Study/Problem Solving

[BOJ_5639] 이진 검색 트리

monitor 2023. 12. 17. 17:45

설명


어떻게 풀지만 정하고 제대로 나아갔으면 쉽게 풀었을텐데 배열의 형태로 자꾸 구현하려고 하니 막혔다. 하지만, 다른 사람들의 풀이법을 알고보니 LinkedList 형태로 풀면 정말 쉽게 풀 수 있는 것이다... 그래서 아래와 같은 형태로 구현하고 진행하면 되는 형태였는데 사실 이건 풀이법을 어떻게 구현할지를 떠올리는 것이 문제의 대부분을 차지 할 것 같다.

 

조금 쉬운 문제였는데 스스로 풀지 못해서 아쉽다.

 

+) 구현에 도움을 준 블로그 

 

[백준] 5639번: 이진 검색 트리 - JAVA

🔗 문제 링크 BOJ 5639번: 이진 검색 트리 1️⃣ 트리 직접 그리기 📝 풀이 과정 전위 순회의 경우 처음 탐색한 값이 항상 root이기 때문에 먼저 처음 값을 root로 설정해 주었다. 이후 반복문을 돌며

girawhale.tistory.com

 

코드


package tree;

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

public class BOJ_5639 {
    static class Node {
        int num;
        Node left, right;

        Node(int num) {
            this.num = num;
        }
        Node(int num, Node left, Node right) {
            this.num = num;
            this.left = left;
            this.right = right;
        }

        public void insert(int val) {
            if(val < this.num){
                if(this.left == null){
                    left = new Node(val);
                }else{
                    left.insert(val);
                }
            }
            else if(val > this.num){
                if(this.right == null){
                    right = new Node(val);
                }else{
                    right.insert(val);
                }
            }
        }
    }
    public static void main(String[] args) throws Exception{
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        Node root = new Node(Integer.parseInt(in.readLine())); 
        String input;
        while (true) {
        	try{
            	input = in.readLine();
            	root.insert(Integer.parseInt(input));
            }catch(Exception e){
            	break;
            }
        }
        postOrder(root);
    }

    private static void postOrder(Node root) {
        if(root != null){
            postOrder(root.left);
            postOrder(root.right);
            System.out.println(root.num);
        }
    }
}
 

5639번: 이진 검색 트리

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

www.acmicpc.net

 

'Study > Problem Solving' 카테고리의 다른 글

[BOJ_17073] 나무 위에 빗물  (1) 2023.12.19
[BOJ_20924] 트리의 기둥과 가지  (0) 2023.12.19
[BOJ_1068] 트리  (0) 2023.12.16
[BOJ_14675] 단절점과 단절선  (0) 2023.12.16
[BOJ_11725] 트리의 부모 찾기  (1) 2023.12.11