[SWEA] 1231. 중위순회 (C++, 라이브러리 X)
Algorithm 카테고리의 다른 글
Tree 기본문제
풀이
자식 유무에 따라서 input 개수가 달라짐.
cin.get()
함수로 줄바꿈 문자인지 체크.
(cin.get()
은 한문자씩 입력받고, 공백 문자나 개행 문자를 생략하지 않음.)
Inorder 함수를 이용하여 in-order 형식으로 Tree 순회.
(왼쪽 자식 트리 순회 후, 자기 자신 출력, 마지막으로 오른쪽 자식 트리 순회)
코드 GitHub
#include <iostream>
using namespace std;
#define MAXN 100
int N;
struct Node {
char alpha;
int children[2];
} nodes[MAXN];
char text[MAXN];
int textCnt;
void Inorder(int idx) {
if(nodes[idx].children[0] != -1) Inorder(nodes[idx].children[0]);
text[textCnt++] = nodes[idx].alpha;
if(nodes[idx].children[1] != -1) Inorder(nodes[idx].children[1]);
return;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
freopen("input.txt", "r", stdin);
for(int tc = 1; tc <= 10; tc++) {
cin >> N;
for(int n = 0; n < N; n++) {
int idx;
cin >> idx;
idx--;
char alpha;
cin >> alpha;
int children[2] = {0, };
if(cin.get() != '\n') {
cin >> children[0];
if(cin.get() != '\n') cin >> children[1];
}
children[0]--;
children[1]--;
nodes[idx].alpha = alpha;
nodes[idx].children[0] = children[0];
nodes[idx].children[1] = children[1];
}
textCnt = 0;
Inorder(0);
cout << '#' << tc << ' ';
for(int i = 0; i < textCnt; i++) cout << text[i];
cout << '\n';
}
return 0;
}
댓글남기기