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 |
Tags
- 스택
- 백준
- PS
- 완전탐색
- 시뮬레이션
- 다이나믹 프로그래밍
- 백트래킹
- dynamic programming
- 소수
- 해커랭크
- 맛집
- 잠실
- DP
- BFS
- 알고리즘
- sw expert academy
- 브루트포스
- BOJ
- 구현
- koitp
- Algorithm
- 삼성 기출
- 그리디
- C++
- 에라토스테네스의 체
- hackerrank
- SWEA
- dfs
- 삼성 SDS 대학생 알고리즘 특강
- 동적 계획법
Archives
- Today
- Total
펭로그
[C++] 백준 BOJ 1991 트리 순회 본문
문제링크 : https://boj.am/1991
문제에서 입력은 A~Z로만 한정되어 있다. 이러한 특성 덕분에 간단한 형태로 트리를 구현할 수 있다.
char 형태의 A(65) ~ Z(90)에서 A(65)씩 빼주면 A(0) ~ Z(25)로 표현할 수 있기 때문이다.
따라서, 인덱스 번호 자체가 노드에 들어있는 문자를 의미하는 것이기 때문에 2개의 배열 만으로도 트리의 구현이 가능하다.
현재 노드를 V, 좌측 자식 노드를 L, 우측 자식노드를 R이라고 한다면
전위순회는 V-L-R 순서로
중위순회는 L-V-R 순서로
후위순회는 L-R-V 순서로 순회하게 된다.
스택을 이용하여 구현을 하려고 시도해봤으나 너무 복잡하여 재귀로 구현했다.
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | // BOJ 1991 트리 순회 #include <iostream> using namespace std; char lNode[26]; // 좌측 자식 노드 char rNode[26]; // 우측 자식 노드 void pre(int idx) { // 현재 노드 출력 cout << char(idx + 'A'); // 자식 노드가 비어있지 않으면 if (lNode[idx] != '.') pre(lNode[idx] - 'A'); if (rNode[idx] != '.') pre(rNode[idx] - 'A'); } void mid(int idx) { if (lNode[idx] != '.') mid(lNode[idx] - 'A'); cout << char(idx + 'A'); if (rNode[idx] != '.') mid(rNode[idx] - 'A'); } void post(int idx) { if (lNode[idx] != '.') post(lNode[idx] - 'A'); if (rNode[idx] != '.') post(rNode[idx] - 'A'); cout << char(idx + 'A'); } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); freopen("../input.txt", "r", stdin); int num; cin >> num; char v, l, r; for (int i = 0; i < num; i++) { cin >> v >> l >> r; // idx: 0~25 -> idx+A: A~Z int idx = v - 'A'; lNode[idx] = l; rNode[idx] = r; } pre(0); cout << '\n'; mid(0); cout << '\n'; post(0); return 0; } | cs |
'Study > PS(Algorithm)' 카테고리의 다른 글
[C++] Codeforces Round #514 (Div. 2) - A. Cashier (0) | 2018.10.06 |
---|---|
[C++] 백준 BOJ 13458 시험 감독 (0) | 2018.10.05 |
[C++] 백준 BOJ 8916 이진 검색 트리 (0) | 2018.10.03 |
[C++] 백준 BOJ 11403 경로 찾기 (0) | 2018.10.02 |
[C++] 백준 BOJ 1759 암호 만들기 (0) | 2018.10.01 |
Comments