티스토리 뷰

백준

백준 소스코드 [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;
}
댓글