백준
백준 소스코드 [C++] 1991 트리 순회
Hani_Levenshtein
2020. 8. 17. 07:34
https://www.acmicpc.net/problem/1991
1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1≤N≤26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 영문자
www.acmicpc.net
백준 소스코드 [C++] 1991 트리 순회
#include <iostream>
#include <utility>
#include <vector>
#include <algorithm>
using namespace std;
struct node {
char alpha;
node* left;
node* right;
};
void preprint(node* root) {
cout << root->alpha;
if (root->left!=NULL) preprint(root->left);
if (root->right != NULL) preprint(root->right);
}
void inprint(node* root) {
if (root->left != NULL) inprint(root->left);
cout << root->alpha;
if (root->right != NULL) inprint(root->right);
}
void postprint(node* root) {
if (root->left != NULL) postprint(root->left);
if (root->right != NULL) postprint(root->right);
cout << root->alpha;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
char x, y, z;
cin >> n;
node* nodes;
nodes = (node*)malloc(sizeof(node) * n);
for (int i = 0;i < n;i++) {
cin >> x >> y >> z;
nodes[x - 'A'].alpha = x;
if (y != '.') nodes[x - 'A'].left = &nodes[y - 'A'];
else nodes[x - 'A'].left = NULL;
if (z != '.') nodes[x - 'A'].right = &nodes[z - 'A'];
else nodes[x - 'A'].right = NULL;
}
node* root = &nodes[0];
preprint(root);
cout << '\n';
inprint(root);
cout << '\n';
postprint(root);
cout << '\n';
return 0;
}