백준 - 1991번 트리 순회

greenTea·2023년 6월 9일
0

1991번 트리 순회

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

public class Main {

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

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

        Node root = new Node("A",null,null);

        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            String value = st.nextToken();
            String left = st.nextToken();
            String right = st.nextToken();

            insert(root, value,left,right);
        }

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

    }

    private static void preOrder(Node cur) {

        if (cur == null)
            return;
        System.out.print(cur.value);
        preOrder(cur.left);
        preOrder(cur.right);
    }

    private static void inOrder(Node cur) {
        if (cur == null)
            return;
        inOrder(cur.left);
        System.out.print(cur.value);
        inOrder(cur.right);
    }

    private static void postOrder(Node cur) {
        if (cur == null)
            return;
        postOrder(cur.left);
        postOrder(cur.right);
        System.out.print(cur.value);
    }

    static void insert(Node current, String value, String left, String right) {

       if (current.value.equals(value)) {
           current.left = left.equals(".") ? null : new Node(left,null,null);
           current.right = right.equals(".") ? null : new Node(right,null,null);
       } else {
           if (current.left != null)
               insert(current.left,value,left,right);
           if (current.right != null)
               insert(current.right,value,left,right);
       }
    }

    static class Node {
        public String value;
        public Node left;
        public Node right;

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

🫡트리순회에 관한 문제입니다. 재귀에 대한 이해가 필요한 문제로 트리에 문제 그대로

전위 순회한 결과 : (루트) (왼쪽 자식) (오른쪽 자식)
중위 순회한 결과 : (왼쪽 자식) (루트) (오른쪽 자식)
후위 순회한 결과 : (왼쪽 자식) (오른쪽 자식) (루트)

위 방식대로만 구현을 한다면 답을 찾을 수 있습니다.

출처 : 백준 - 트리순회

profile
greenTea입니다.

0개의 댓글