알고리즘/백준 등

트리순회[백준]

컵라면만두세트 2022. 4. 27. 10:37

char 형태로 변경하는 방법과 아스키코드표에 대한 이해 

재귀를 활용한 풀이

package 트리;

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


public class 트리순회 {
    static List<Node>[] list;
    static StringBuilder sb = new StringBuilder();
    //전위 중위 후위
    //전위 root 탐색
    //중위 left 탐색
    //후위 right 탐색
    static class Node{
        int left;
        int right;

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

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = null;
        int n = Integer.parseInt(br.readLine());

        list = new ArrayList[n+1];
        // list 배열
        for(int i=1; i<n+1; i++){
            list[i] = new ArrayList<>();
        }

        for(int i=1; i<n+1; i++){
            //1번 부터 시작이니까
            String[] line = br.readLine().split(" ");
            int data = line[0].charAt(0) - 'A'+1;
            System.out.println("data : " +   data);
            int left = line[1].charAt(0) - 'A'+1;
            System.out.println("left : " +  left);
            int right = line[2].charAt(0) - 'A'+1;
            System.out.println("right : " +  right);

            System.out.println("------------------");

            list[data].add(new Node(left, right));
        }

        preorder(1);
        sb.append("\n");
        inorder(1);
        sb.append("\n");
        postorder(1);
        System.out.println(sb.toString());
    }
    static void preorder(int start){
        for(Node node : list[start]){
            int l = node.left;
            int r = node.right;

            sb.append((char)(start+'A' -1));
            if(l!=-18) preorder(l);
            if(r!=-18) preorder(r);
        }
    }

    static void inorder(int start){
        for(Node node : list[start]){
            int l = node.left;
            int r = node.right;

            if(l != -18) inorder(l);
            sb.append((char)(start+'A' - 1));
            if(r != -18) inorder(r);
        }
    }

    static void postorder(int start){
        for(Node node : list[start]){
            int l = node.left;
            int r = node.right;

            if(l !=-18) postorder(l);
            if(r!=-18) postorder(r);
            sb.append((char)(start+'A' -1));
        }
    }


}