관리 메뉴

Storage Gonie

(1) [C++, Java] 백준 No.1991 : 트리 순회 본문

알고리즘/백준풀이10. 트리

(1) [C++, Java] 백준 No.1991 : 트리 순회

Storage Gonie 2019. 5. 23. 20:59
반응형

문제

풀이

자세한 풀이 : https://ldgeao99.tistory.com/entry/챕터7-3-트리-문제풀이

# C++(2차원 배열로 왼쪽자식과 오른쪽 자식을 저장하는 방식)

# include <iostream>

using namespace std;

int arr[26][2];

void preOrder(int x){
    if(x == -1)
        return;
    cout << (char) (x + 'A');
    preOrder(arr[x][0]);
    preOrder(arr[x][1]);
}

void inOrder(int x){
    if(x == -1)
        return;
    inOrder(arr[x][0]);
    cout << (char) (x + 'A');
    inOrder(arr[x][1]);
}

void postOrder(int x){
    if(x == -1)
        return;
    postOrder(arr[x][0]);
    postOrder(arr[x][1]);
    cout << (char) (x + 'A');
}

int main()
{
    int n;
    cin >> n;
   
    // 입력으로부터 트리의 정보 저장하기(문자로 된것을 모두 숫자로 저장)
    while(n--){
        char parent, leftChild, rightChild;
        cin >> parent >> leftChild >> rightChild;
        
        // 부모노드
        parent = parent - 'A';

        // 왼쪽 자식노드의 값 삽입
        if (leftChild == '.')
            arr[parent][0] = -1;
        else
            arr[parent][0] = leftChild - 'A';

        // 오른쪽 자식노드의 값 삽입
        if (rightChild == '.')
            arr[parent][1] = -1;
        else
            arr[parent][1] = rightChild - 'A';
    }

    // 트리를 순회하여 출력
    preOrder(0);
    cout << "\n";
    inOrder(0);
    cout << "\n";
    postOrder(0);
    cout << "\n";
}

# Java(2차원 배열로 왼쪽자식과 오른쪽 자식을 저장하는 방식)

import java.util.*;
public class Main {
    public static void preorder(int[][] a, int x) {
        if (x == -1) return;
        System.out.print((char)(x+'A'));
        preorder(a,a[x][0]);
        preorder(a,a[x][1]);
    }
    public static void inorder(int[][] a, int x) {
        if (x == -1) return;
        inorder(a,a[x][0]);
        System.out.print((char)(x+'A'));
        inorder(a,a[x][1]);
    }
    public static void postorder(int[][] a, int x) {
        if (x == -1) return;
        postorder(a,a[x][0]);
        postorder(a,a[x][1]);
        System.out.print((char)(x+'A'));
    }
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();
        int[][] a = new int[26][2];
        for (int i=0; i<n; i++) {
            String line = sc.nextLine();
            int x = line.charAt(0) - 'A';
            char y = line.charAt(2);
            char z = line.charAt(4);
            if (y == '.') {
                a[x][0] = -1;
            } else {
                a[x][0] = y-'A';
            }
            if (z == '.') {
                a[x][1] = -1;
            } else {
                a[x][1] = z-'A';
            }
        }
        preorder(a,0);
        System.out.println();
        inorder(a,0);
        System.out.println();
        postorder(a,0);
        System.out.println();
    }
}
반응형
Comments