녕의 학습 기록

백준_1991 트리 순회 (이진트리, 순회) 본문

Algorithm/Algorithm 문제

백준_1991 트리 순회 (이진트리, 순회)

kjyyjk 2024. 3. 8. 11:15

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BJ_1991_트리순회 {

    static Node[] tree;
    static StringBuilder preOrderResult = new StringBuilder();
    static StringBuilder inOrderResult = new StringBuilder();
    static StringBuilder postOrderResult = new StringBuilder();

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());

        tree = new Node[n];

        int i, ind, leftInd, rightInd;
        char left, right;
        StringTokenizer st;
        for (i=0; i<n; i++) {
            st = new StringTokenizer(br.readLine(), " ");

            ind = st.nextToken().charAt(0) - 'A';
            left = st.nextToken().charAt(0);
            right = st.nextToken().charAt(0);

            if (left == '.') {
                leftInd = -1;
            } else {
                leftInd = left - 'A';
            }

            if (right == '.') {
                rightInd = -1;
            } else {
                rightInd = right - 'A';
            }

            tree[ind] = new Node(leftInd, rightInd);
        }

        preOrder(0);
        inOrder(0);
        postOrder(0);

        System.out.println(preOrderResult);
        System.out.println(inOrderResult);
        System.out.println(postOrderResult);
    }

    static void preOrder(int a) {
        if (a == -1) {
            return;
        }
        preOrderResult.append((char)(a+'A'));
        preOrder(tree[a].left);
        preOrder(tree[a].right);
    }

    static void inOrder(int a) {
        if (a == -1) {
            return;
        }
        inOrder(tree[a].left);
        inOrderResult.append((char)(a+'A'));
        inOrder(tree[a].right);
    }

    static void postOrder(int a) {
        if (a == -1) {
            return;
        }
        postOrder(tree[a].left);
        postOrder(tree[a].right);
        postOrderResult.append((char)(a+'A'));
    }

    static class Node {
        int left;
        int right;

        public Node(int left, int right) {
            this.left = left;
            this.right = right;
        }
    }

}
 

1991번: 트리 순회

첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파

www.acmicpc.net