알고리즘 문제 풀이

문제

https://www.acmicpc.net/problem/1991

 

1991번: 트리 순회

첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파

www.acmicpc.net


풀이

재귀호출을 이용한 전중후 위 탐색을 실행하는 코드 작성을 요한다

순회의 개념을 알고 있다면 재귀호출에서 출력문의 위치만 전중후에 맞게 배치한다면 어려움이 없는 문제이다


소스 코드

#include <iostream>
#include <string>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <map>
#include <cctype>
#include <set>
#include <string.h>

using namespace std;

int N;
char arr[26][2];

void preorder(char c) {
	if (c == '.')
		return;

	cout << c;
	preorder(arr[c - 65][0]);
	preorder(arr[c - 65][1]);
}

void inorder(char c) {
	if (c == '.')
		return;

	inorder(arr[c - 65][0]);
	cout << c;
	inorder(arr[c - 65][1]);
}

void postorder(char c) {
	if (c == '.')
		return;

	postorder(arr[c - 65][0]);
	postorder(arr[c - 65][1]);
	cout << c;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> N;
	for (int i = 0; i < N; i++) {
		char input;
		cin >> input;
		cin >> arr[input - 65][0] >> arr[input - 65][1];
	}

	preorder('A');
	cout << '\n';
	inorder('A');
	cout << '\n';
	postorder('A');
	cout << '\n';
}

+ Recent posts