1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파
www.acmicpc.net
이해하기
트리 순회 3가지
전위 순회 (preorder) : 현재 노드 - 왼쪽 노드 - 오른쪽 노드
중위 순회 (inorder) : 왼쪽 노드 - 현재 노드 - 오른쪽 노드
후위 순회 (postorder) : 왼쪽 노드 - 오른쪽 노드 - 현재 노드
위 3가지 트리 순회는 해당하는 순서대로 함수로 재귀적으로 호출해 구현할 수 있다.
[백준] 1991번 : 트리 순회 [C/C++] — 백준 하루 한 문제 (tistory.com)
[백준] 1991번 : 트리 순회 [C/C++]
#문제 1991번: 트리 순회 https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노
rujang.tistory.com
[백준/C++]#1991 - 트리 순회 (tistory.com)
[백준/C++]#1991 - 트리 순회
풀이 #include using namespace std; int a[50][2]; void preorder (int N) { if (N == -1) return; cout x >> y >> z;// 알파벳 입력 x = x-'A';// 문자 -> 숫자 변환 if (y == '.') {// 입력이 .이면 그 자리에 -1 대입 a[x][0] = -1; } else { a[x
etyoungsu.tistory.com
최종코드
#include <iostream>
using namespace std;
int a[50][2];
//전위 순회
void preorder (int n) {
if (n == -1) return;
cout << (char)(n+'A');
preorder(a[n][0]);
preorder(a[n][1]);
}
//중위 순회
void inorder (int n) {
if (n == -1) return;
inorder(a[n][0]);
cout << (char)(n+'A');
inorder(a[n][1]);
}
//후위 순회
void postorder (int n) {
if (n == -1) return;
postorder(a[n][0]);
postorder(a[n][1]);
cout << (char)(n+'A');
}
int main() {
int n;
cin >> n;
for (int i=0; i<n; i++) {
char x, y, z;
cin >> x >> y >> z;
x = x-'A'; // char to int
//주어진 트리를 저장
//왼쪽 노드가 없는 경우
if (y == '.') {
a[x][0] = -1;
}
else {
a[x][0] = y-'A';
}
//왼쪽 노드가 없는 경우
if(z == '.') {
a[x][1] = -1;
}
else {
a[x][1] = z-'A';
}
}
preorder(0); cout << '\n';
inorder(0); cout << '\n';
postorder(0);
return 0;
}
'‡ CODING TEST STUDY ‡ > º 백준' 카테고리의 다른 글
[백준 C++ 2667번] 단지 번호 붙이기 (0) | 2023.11.20 |
---|---|
[백준 11725번 C++] 트리의 부모 찾기 (0) | 2023.11.12 |
-- [백준 1012번 C++] 유기농 배추 (0) | 2023.11.12 |
[백준 2606번 C++] 바이러스 (1) | 2023.11.12 |
[백준 10451번 C++] 순열 사이클 (0) | 2023.11.11 |