문제 설명

Untitled

문제 분석

Untitled

슈도코드

Untitled

구현

public class 트리순회_1991 {
    static int[][] tree;
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int N = Integer.parseInt(scan.nextLine());
        tree = new int[26][2]; //0, 1: 왼쪽 자식 노드, 2: 오른쪽 자식 노드
        for (int i = 0; i < N; i++) {
            String[] temp = scan.nextLine().split(" ");
            int node = temp[0].charAt(0) - 'A'; //인덱스로 변환
            char left = temp[1].charAt(0);
            char right = temp[2].charAt(0);

            // 왼쪽 자식 노드: 없으면 -1 저장
            if(left == '.'){
                tree[node][0] = -1;
            } else {
                tree[node][0] = left - 'A';
            }

            // 오른쪽 자식 노드: 없으면 -1 저장
            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();
    }

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

        System.out.print((char) (now + 'A')); // 현재 노드
        preOrder(tree[now][0]); // 왼쪽 탐색
        preOrder(tree[now][1]); // 오른쪽 탐색
    }

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

        inOrder(tree[now][0]); // 왼쪽 탐색
        System.out.print((char) (now + 'A')); // 현재 노드
        inOrder(tree[now][1]); // 오른쪽 탐색
    }

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

        postOrder(tree[now][0]); // 왼쪽 탐색
        postOrder(tree[now][1]); // 오른쪽 탐색
        System.out.print((char) (now + 'A')); // 현재 노드
    }
}