문제

문제 링크

문제 접근법

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

코드

#include <cstdio>
#include <vector>

using namespace std;

int n;
char s, a, b;
vector< vector<int> > v;

void preorder(int n){
    if(n == 0) return;
    printf("%c", 'A' + n - 1);
    preorder(v[n][0]);
    preorder(v[n][1]);

}

void inorder(int n){
    if(n == 0)return;
    inorder(v[n][0]);
    printf("%c", 'A' + n - 1);
    inorder(v[n][1]);
}

void postorder(int n){
    if(n == 0) return;
    postorder(v[n][0]);
    postorder(v[n][1]);
    printf("%c", 'A' + n - 1);

}

int main(){
    v = vector< vector<int> > (27, vector<int>(2,0));
    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        scanf(" %c %c %c", &s, &a, &b);
        if(a != '.')v[s - 'A' + 1][0] = a - 'A' + 1;
        if(b != '.')v[s - 'A' + 1][1] = b - 'A' + 1;
    }
    preorder(1); printf("\n");
    inorder(1); printf("\n");
    postorder(1); 
}

느낀점

  • 트리 순회는 이지했다~~ㅎㅎ