[C++]백준1991번 트리 순회

1 minute read

문제는 다음과 같다.

오늘은 백준1991번 트리 순회 문제를 풀어보도록 하자.

자료구조 때 배운 트리를 구현해보는 것이다. 재귀를 이용하면 되고 .이 나왔을 때는 -1, 그 나머지는 ASCII Code 변환 값을 넣어주었다.

그리고 preorder, inorder, postorder를 구현해주었다.

                                     [코드]
#include <iostream>
#include <vector>
using namespace std;

int N;
char node_1, node_2, node_3;
vector<int>v[26];

void preorder(int idx) {
	cout << char(idx + 'A');

	for (int i = 0; i < v[idx].size(); i++) {
		if (v[idx][i] != -1) {
			preorder(v[idx][i]);
		}
	}
}

void inorder(int idx) {

	if (v[idx][0] != -1 && v[idx][1] != -1) {
		inorder(v[idx][0]);
		cout << char(idx + 'A');
		inorder(v[idx][1]);
	}
	if (v[idx][0] != -1 && v[idx][1] == -1) {
		inorder(v[idx][0]);
		cout << char(idx + 'A');
	}
	if (v[idx][0] == -1 && v[idx][1] != -1) {
		cout << char(idx + 'A');
		inorder(v[idx][1]);
	}
	if (v[idx][0] == -1 && v[idx][1] == -1) {
		cout << char(idx + 'A');
	}
}

void postorder(int idx) {
	for (int i = 0; i < v[idx].size(); i++) {
		if (v[idx][i] != -1) {
			postorder(v[idx][i]);
		}
	}
	cout << char(idx + 'A');
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin >> N;

	for (int i = 0; i < N; i++) {
		cin >> node_1 >> node_2 >> node_3;
		if (node_2 != '.') {
			v[node_1 - 'A'].push_back(node_2 - 'A');
		}
		else {
			v[node_1 - 'A'].push_back(-1);
		}
		if (node_3 != '.') {
			v[node_1 - 'A'].push_back(node_3 - 'A');
		}
		else {
			v[node_1 - 'A'].push_back(-1);
		}
	}
	preorder(0);
	cout << '\n';
	inorder(0);
	cout << '\n';
	postorder(0);
	cout << '\n';
}