문제 출처 : https://www.acmicpc.net/problem/5639

 

5639번: 이진 검색 트리

문제 이진 검색 트리는 다음과 같은 세 가지 조건을 만족하는 이진 트리이다. 노드의 왼쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 작다. 노드의 오른쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 크다. 왼쪽, 오른쪽 서브트리도 이진 검색 트리이다. 전위 순회 (루트-왼쪽-오른쪽)은 루트를 방문하고, 왼쪽 서브트리, 오른쪽 서브 트리를 순서대로 방문하면서 노드의 키를 출력한다. 후위 순회 (왼쪽-오른쪽-루트)는 왼쪽 서브트리, 오른쪽 서브트리,

www.acmicpc.net

이 문제는 전위 순회한 결과를 보고 후위 순회한 결과를 출력하는 것이다.

전위 순회는 자기 자신을 맨 처음 출력하기 때문에 root는 맨 처음 나온 수가 되고

후위 순회는 좌, 우측을 다 보고 출력을 하기 때문에 

아래와 같은 풀이로 풀 수 있다.

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include<stdio.h>
#pragma warning(disable:4996)
int tree[1000001][3];
void insert(int root, int num)
{
    if (num > root)
    {
        if (tree[root][1== 0)
            tree[root][1= num;
        else
            insert(tree[root][1],num);
        
    }
    else if (num < root)
    {
        if (tree[root][0== 0)
            tree[root][0= num;
        else
            insert(tree[root][0],num);
    }
}
void postorder(int start)
{
    if (tree[start][0!= 0)
        postorder(tree[start][0]);
    if (tree[start][1!= 0)
        postorder(tree[start][1]);
    printf("%d\n", start);
}
int main()
{
    int num;
    int root;
    scanf("%d"&root);
    while (scanf("%d"&num) == 1)
    {
        insert(root, num);
    }
    
    postorder(root);
}
블로그 이미지

뀨심볼

깃허브 주소는 : https://github.com/hhyc2 입니다~

,