Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 가장 긴 증가하는 부분 수열
- DFS
- 조합
- 알고리즘
- 조합론
- 다익스트라
- 백트래킹
- 백준
- C++1967
- 인덱스 트리
- 순열
- C++ 1918
- LIS
- 위상정렬
- DP
- 백준 숨바꼭질5
- C++1167
- 백준 17071
- C++ 17071
- C++ 1937
- 문자열
- 프로그래머스
- C++
- 소트 게임
- 투포인터
- strtok
- Backtracking
- c언어
- 16933
- BFS
Archives
- Today
- Total
블로그
[C++] 백준 2263 : 트리의 순회 본문
728x90
https://www.acmicpc.net/problem/2263
2263번: 트리의 순회
첫째 줄에 n(1 ≤ n ≤ 100,000)이 주어진다. 다음 줄에는 인오더를 나타내는 n개의 자연수가 주어지고, 그 다음 줄에는 같은 식으로 포스트오더가 주어진다.
www.acmicpc.net
preorder / inorder / postorder 순회 개념 잘 알고있기
기본적으로 저 셋 중 최소 두 개가 주어진다면
원래 트리를 만들어 낼 수 있다고 함 신기ㅎ
*-> (추가) inorder가 반드시 포함되어야 만들 수 있음!!
https://www.acmicpc.net/problem/4257
4257번: 프리오더 포스트오더
이진 트리를 인오더(in-order)와 포스트오더(post-order)로 순회한 결과가 주어졌을 때, 프리오더(pre-order)로 순회한 결과를 찾을 수 있다. 또, 인오더와 포리오더로 순회한 결과가 주어졌을 때, 포스트
www.acmicpc.net
#include <iostream>
#include <vector>
using namespace std;
int inorder[100000];
int postorder[100000];
void pre_order(int in_s, int in_e, int post_s, int post_e) {
if (in_s > in_e || post_s > post_e) return;
int root = postorder[post_e];
printf("%d ", root);
int len = 0;
for (int i = in_s; i <= in_e; i++) {
if (inorder[i] == root) {
break;
}
len++;
}
pre_order(in_s, in_s + len - 1, post_s, post_s + len - 1);
pre_order(in_s + len + 1, in_e, post_s + len, post_e - 1);
}
int main() {
int N;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%d", &inorder[i]);
}
for (int i = 0; i < N; i++) {
scanf("%d", &postorder[i]);
}
pre_order(0, N - 1, 0, N - 1);
}
'PS' 카테고리의 다른 글
[C++] 백준 2504 : 괄호의 값 (0) | 2023.03.05 |
---|---|
[C++] 백준 4256 : 트리 (0) | 2023.03.05 |
[C++] 백준 1780 : 종이의 개수 (0) | 2023.03.05 |
[C++] 백준 1080 : 행렬 (0) | 2023.03.04 |
[C++] 백준 14226 : 이모티콘 (0) | 2023.03.04 |
Comments