728x90

트리를 전위, 중위, 후위 순회 기본적인 코드는 아래와 같다.

이를 통해 다른 트리 문제를 풀 수 있는 기반이 될듯.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Main
{
    static int[][] tree;
    public static void main(String args[])
    {
        try {
            Scanner sc = new Scanner(System.in);
            int N = sc.nextInt(); sc.nextLine();
            tree = new int[26][2];

            for(int i=0; i<N; i++){
                String[] data = sc.nextLine().split(" ");
                int node = data[0].charAt(0) - 'A';
                char left = data[1].charAt(0);
                char right = data[2].charAt(0);

                if(left == '.') tree[node][0] = -1;
                else tree[node][0] = left - 'A';

                if(right == '.') tree[node][1] = -1;
                else tree[node][1] = right - 'A';
            }

            preOrder(0);
            System.out.println();
            inOrder(0);
            System.out.println();
            postOrder(0);
            System.out.println();
        } catch(Exception e) {
            System.out.println(e);
        }
    }

    // 전위순회
    static void preOrder(int node){
        if(node == -1) return;

        System.out.print((char)(node+'A'));
        preOrder(tree[node][0]);
        preOrder(tree[node][1]);
    }

    // 중위순회
    static void inOrder(int node){
        if(node == -1) return;

        inOrder(tree[node][0]); // 왼쪽부터
        System.out.print((char)(node+'A'));
        inOrder(tree[node][1]); // 오른쪽
    }

    // 후위순회
    static void postOrder(int node){
        if(node == -1) return;

        postOrder(tree[node][0]); // 왼쪽
        postOrder(tree[node][1]); // 오른쪽
        System.out.print((char)(node+'A'));
    }
}

 

728x90

'algorithm > baekjoon' 카테고리의 다른 글

[BOJ] 14425 문자열 찾기 (Java)  (0) 2023.10.19
[BOJ] 2343 기타 레슨 (Java)  (0) 2023.01.31
[BOJ] 1700 멀티탭 스케줄링 (Java)  (0) 2022.09.29
[BOJ] 2446 별 찍기-9 (Java)  (0) 2022.09.29
[BOJ] 1978 소수 찾기 (Java)  (2) 2022.06.28

+ Recent posts