Hard deck/reindexing d1

070 : 트리 순회하기

서버관리자 페페 2023. 6. 15. 13:42

 

 

순회 자체는 간단하다 

현재 node Print / L recursive / R recursive

순서만 정해준 후 프로그램에게 '지금 - 다음' Unit의 반복으로 while line을 돌도록 시키는 것

*내가 하는 게 아님

 

 

 

 

 

 

 

 

 

 

 

문제는 인자의 공급과 어떤 TP를 사용할 것인가인데, 

binary tree 순회에서는 node 정보로 양 자식노드에 접근가능한 int[26][2] 사용

 

숫자 + 'A' = char

 

 

 

 

 

 

 

 

 

 

 

String > char 도 가능

 

 

 

 

괄호로 묶어줘야 함

(char) (node + 'A')

 

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    static int[][] TP;

    public static void main(String[] args) {

        // ISC
        Scanner sc = new Scanner(System.in);
        int V = sc.nextInt();

        // D2F
        TP = new int[26][2];
        for (int i = 1; i <= V; i++) {

            String[] set = sc.nextLine().split(" ");
            int node = set[0].charAt(0) - 'A';
            char L = set[0].charAt(0);
            char R = set[2].charAt(0);

            if (L == '.')
                TP[node][0] = -1;
            else
                TP[node][0] = L - 'A';

            if (R == '.')
                TP[node][1] = -1;
            else
                TP[node][1] = R - 'A';
        }

        // OP + OEC patch
        preOrder(0);
        System.out.println();
        inOrder(0);
        System.out.println();
        postOrder(0);
    }

    static void preOrder(int node) {
        if (node == -1)
            return;
        System.out.print((char) node + 'A');
        preOrder(TP[node][0]);
        preOrder(TP[node][1]);
    }

    static void inOrder(int node) {
        if (node == -1)
            return;
        inOrder(TP[node][0]);
        System.out.print((char) node + 'A');
        inOrder(TP[node][1]);
    }

    static void postOrder(int node) {
        if (node == -1)
            return;
        postOrder(TP[node][0]);
        postOrder(TP[node][1]);
        System.out.print((char) node + 'A');
    }
}