[백준] 5639 이진검색트리 (골드4)

AI·2025년 9월 9일

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

분할정복법 -> 전위를 후위로 바꾸니 왼쪽, 오른쪽, 노드를 출력하게 재귀 함수를 사용하면 된다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;

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

        // 전위 순회 값 => 트리 생성 => 후위 순위 값 출력
        // null아닐때까지 입력 받기
        String s;
        Node root = new Node(Integer.parseInt(br.readLine()));

        while (true) {
            s = br.readLine();
            if(s == null || s.equals("")) break;
            root.insert(Integer.parseInt(s));
        }

        post(root);

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

    static class Node{
        int data;
        Node left, right;
        Node(int data){
            this.data=data;
            this.left=null;
            this.right=null;
        }

        void insert(int n){
            if(n < this.data) {
                if(this.left == null)
                    this.left = new Node(n);
                else this.left.insert(n);
            }
            else{
                if(this.right == null)
                    this.right = new Node(n);
                else this.right.insert(n);
            }
        }

    }
    public static void post(Node node) throws Exception{
        if(node == null) return;

        post(node.left);
        post(node.right);
        bw.write(node.data+"\n");
    }
}

==
insert 다른 방식

void insert(Node node, int val){
	if(node == null){
    	return new Node(val);
    }
    if(val < node.val){
    	node.left = insert(node.left, val);
    }
    else {
    	node.right = insert(node.right, val);
	}
	return node;
}

0개의 댓글