느낀점

  • System.out.print((char) (now + 'A'));: (now + ‘A’)을 괄호 없이 문자로 변환하면(System.out.print((char) now + 'A');) 제대로 문자로 변환되지 않는다.
  • 순회를 어떻게 할지 고민 후 교재 설명을 봤는데 내 생각과 달리 너무 간단히 구현한 문제



문제

트리 순회(백준: 1991번)

image



풀이

import java.util.Scanner;

public class Main {
    static int[][] tree;
    static int nodeCnt;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        nodeCnt = sc.nextInt();
        sc.nextLine();

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

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

        preOrder(0);
        System.out.println();
        inOrder(0);
        System.out.println();
        postOrder(0);

        sc.close();
    }

    private static void postOrder(int now) {
        if (now == -1)
            return;

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

    private static void inOrder(int now) {
        if (now == -1)
            return;

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

    private static void preOrder(int now) {
        if (now == -1)
            return;

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