기록하는 개발자

[백준][JAVA] 1991 : 트리 순회 본문

Algorithm

[백준][JAVA] 1991 : 트리 순회

밍맹030 2021. 7. 21. 16:27
728x90

https://www.acmicpc.net/problem/1991

 

1991번: 트리 순회

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

www.acmicpc.net

import java.util.*;
class Node {
    char data;
    Node left;
    Node right;
    Node(char data){
        this.data = data;
    }
}
public class Main {
    public Node root;

    public void createNode(char data, char leftData, char rightData) {
        if(root == null) {
            root = new Node(data);
            if(leftData != '.') root.left = new Node(leftData);
            if(rightData != '.') root.right = new Node(rightData);
        }
        else searchNode(root, data, leftData, rightData);
    }

    public void searchNode(Node node, char data, char leftData, char rightData) {
        if(node == null) return;

        else if(node.data == data) {
            if(leftData != '.') node.left = new Node(leftData);
            if(rightData != '.') node.right = new Node(rightData);
        }
        else {
            searchNode(node.left, data, leftData, rightData);
            searchNode(node.right, data, leftData, rightData);
        }
    }

    public void preOrder(Node node) { // root-left-right
        if(node != null) {
            System.out.print(node.data);
            if(node.left != null) preOrder(node.left);
            if(node.right != null) preOrder(node.right);
        }
    }

    public void inOrder(Node node) { // left-root-right
        if(node != null) {
            if(node.left != null) inOrder(node.left);
            System.out.print(node.data);
            if(node.right != null) inOrder(node.right);
        }
    }

    public void postOrder(Node node) { // left-right-root
        if(node != null) {
            if(node.left != null) postOrder(node.left);
            if(node.right != null) postOrder(node.right);
            System.out.print(node.data);
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        Main m = new Main();

        for (int i = 0; i < n; i++)
            m.createNode(sc.next().charAt(0), sc.next().charAt(0), sc.next().charAt(0));

        m.preOrder(m.root);
        System.out.println();
        m.inOrder(m.root);
        System.out.println();
        m.postOrder(m.root);
    }
}
728x90