[알고리즘] 1991. 트리 순회

2024. 2. 18. 16:03Algorithm/with Java

0. 문제

 

 

1991번: 트리 순회

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

www.acmicpc.net

 


1. 문제 이해

 

  1. 트리
  2. dfs

 


2. 제출

import java.io.*;
import java.util.StringTokenizer;
// import java.util.Arrays;

public class BOJ1991 {

    static int N;
    static Node[] tree;
    static StringBuffer sb;

    private static class Node {
        char data; 
        char left;
        char right;

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

    private static void init() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        tree = new Node[26];
        sb = new StringBuffer();

        char data, left, right;
        for (int i = 0; i<N; i++) {
            st = new StringTokenizer(br.readLine());
            data = st.nextToken().charAt(0); 
            left = st.nextToken().charAt(0); 
            right = st.nextToken().charAt(0); 

            tree[data - 'A'] = new Node(data, left, right);
        }
    }

    private static void solve() {
        sb.append(pre('A')).append("\n");
        sb.append(in('A')).append("\n");
        sb.append(post('A')).append("\n");
    }

    private static String pre(char node) {
        Node cur = tree[node - 'A'];
        String ret = "" + cur.data; 
        if(cur.left != '.'){
            ret += pre(cur.left);
        }
        if(cur.right != '.'){
            ret += pre(cur.right);
        }
        return ret;
    }

    private static String in(char node) {
        Node cur = tree[node - 'A'];
        String ret = "";
        if(cur.left != '.'){
            ret += in(cur.left);
        }
        ret += cur.data; 
        if(cur.right != '.'){
            ret += in(cur.right);
        }
        return ret;
    }

    private static String post(char node) {
        Node cur = tree[node - 'A'];
        String ret = "";
        if(cur.left != '.'){
            ret += post(cur.left);
        }
        if(cur.right != '.'){
            ret += post(cur.right);
        }
        ret += cur.data; 
        return ret;
    }

    public static void main(String[] args) throws Exception {
        init();
        solve();
        System.out.println(sb);
    }
    
}