티스토리 뷰

알고리즘/BOJ

[백준] 4256 트리

세진짱 2018. 5. 15. 00:52


트리의 전위,중위 순회 결과를 주고 후위 순회 결과를 구하는 문제다

재귀를 잘 이용하면 풀 수 있다


방법은

1. 전위순회에서 첫번째 노드는 루트라는것을 기억한다!

2. 후위순회에서 루트기준 앞쪽 노드들은 왼쪽, 뒷쪽은 오른쪽 서브트리다

3. 후위 순회를 출력하므로 왼쪽 오른쪽 순서로 함수를 호출하고 루트를 출력한다


후위순회에서 루트 위치를 찾기 위해 map을 사용했다!


소스코드

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
#include <iostream>
#include <algorithm>
#include <map>
#include <cstring>
using namespace std;
int t, n, pre[1010], in[1010];
map<intint> mp;
 
void go(int s, int e,int x, int y) {
 
    if (s > e || x > y) return;
 
    int root = pre[s];
    int pos = mp[pre[s]];
 
    go(s + 1, s + (pos - x), x, pos - 1);
    go(s + (pos - x) + 1, e, pos + 1, y);
    printf("%d ", root);
}
int main() {
    scanf(" %d"&t);
    while (t--) {
        memset(pre, 0sizeof(pre));
        mp.clear();
        scanf(" %d"&n);
        for (int i = 0; i < n; i++scanf(" %d"&pre[i]);
        for (int i = 0; i < n; i++) {
            int x; scanf(" %d"&x);
            in[i] = x;
            mp[x] = i;
        }
        go(0, n - 10, n - 1); puts("");
    }
}
cs


'알고리즘 > BOJ' 카테고리의 다른 글

[백준] 14585 사수빈탕  (0) 2018.05.17
[백준] 11581 구호물자  (0) 2018.05.15
[백준] 5639 이진 검색 트리  (0) 2018.05.14
[백준] 13333 Q-인덱스  (0) 2018.05.14
[백준] 1535 안녕  (0) 2018.05.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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
글 보관함