본문 바로가기
알고리즘/트리

백준 5639번 : 이진 검색 트리 java

by LDY3838 2022. 5. 30.
반응형

이 문제는 값을 입력을 받아 이진트리를 만드는 문제입니다.

전위 순회, 후위 순회에 대한 자료는 아래의 글에서 확인하실 수 있습니다.

https://dy-coding.tistory.com/entry/%EB%B0%B1%EC%A4%80-1991%EB%B2%88-%ED%8A%B8%EB%A6%AC-%EC%88%9C%ED%9A%8C-java

 

백준 1991번 : 트리 순회 java

이 문제는 트리를 만들어서 노드를 삽입 후 전위 순회, 중위 순회, 후위 순회한 결과를 출력하는 문제입니다. 전위 순회와 중위 순회, 후위 순회에 대한 설명은 네이버 백과사전에 자세히 나와있

dy-coding.tistory.com

 

바로 소스 코드를 확인하도록 하겠습니다.


import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Tree tree = new Tree();

        while(true){
            String input = br.readLine();

            if(input == null)
                break;

            int num = Integer.parseInt(input);
            tree.createNode(new Node(num));
        }

        tree.postOrder();
    }
}

class Tree{
    Node root;

    void createNode(Node node){
        if(root == null)
            root = node;

        else
            createNode(root, node);
    }
    void createNode(Node node, Node newNode){
        if(node.data<newNode.data){
            if(node.right == null)
                node.right = newNode;
            else
                createNode(node.right, newNode);
        }
        else{
            if(node.left == null)
                node.left = newNode;
            else
                createNode(node.left, newNode);
        }
    }

    void postOrder(){
        postOrder(root);
    }
    void postOrder(Node node){
        if(node.left != null)
            postOrder(node.left);

        if(node.right != null)
            postOrder(node.right);

        System.out.println(node.data);
    }
}

class Node{
    Node left, right;
    int data;

    Node(int data){
        this.data = data;
    }
}

 

이 문제도 위에 있는 링크인 1991번과 유사합니다.

다만 조금 주의하셔야 하는 부분은 main 함수 안의 아래와 같은 코드입니다.

while(true){
    String input = br.readLine();

    if(input == null)
        break;

    int num = Integer.parseInt(input);
    tree.createNode(new Node(num));
}

이 문제는 입력할 때 종료 조건이 빈 문장을 넣는 것입니다.

따라서 input이 들어오지 않아 null이 된다면 종료시켜 주시면 됩니다.

또한 이 문제를 풀 때 1991번에서는 createNode와 find 함수를 이용하였었습니다.

하지만 createNode와 find 함수의 차이점이 없다고 저는 느꼈고 오버로딩을 이용하여 createNode라는 하나의 함수로
구현하였습니다.

반응형

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

백준 1068번 : 트리 java  (0) 2022.06.26
백준 1647번 : 도시 분할 계획 java  (0) 2022.06.19
백준 1922번 : 네트워크 연결 java  (0) 2022.06.18
백준 1991번 : 트리 순회 java  (0) 2022.05.30

댓글