less than 1 minute read

1991 트리 순회 (c++)

문제

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

접근 방식

트리, 재귀
전위 순회 : 부모 -> 왼쪽 -> 오른쪽 순으로 재귀 중위 순회 : 왼쪽 -> 부모 -> 오른쪽 순으로 재귀 후위 순회 : 왼쪽 -> 오른쪽 -> 부모 순으로 재귀

문제 풀이

#include <iostream>
using namespace std;

int N;
pair<char, char> arr[26] = {};

void PreOrder(int num)
{
	cout << char(num + 'A');
	if (arr[num].first != '.') PreOrder(arr[num].first - 'A');
	if (arr[num].second != '.') PreOrder(arr[num].second - 'A');
	if (!num) cout << endl;
}
void InOrder(int num)
{
	if (arr[num].first != '.') InOrder(arr[num].first - 'A');
	cout << char(num + 'A');
	if (arr[num].second != '.') InOrder(arr[num].second - 'A');
	if (!num) cout << endl;
}
void PostOrder(int num)
{
	if (arr[num].first != '.') PostOrder(arr[num].first - 'A');
	if (arr[num].second != '.') PostOrder(arr[num].second - 'A');
	cout << char(num + 'A');
	if (!num) cout << endl;
}

int main()
{
	cin >> N;
	
	char parent, left, right;
	while (N-- > 0)
	{
		cin >> parent >> left >> right;
		arr[parent - 'A'].first = left;
		arr[parent - 'A'].second = right;
	}

	PreOrder(0);
	InOrder(0);
	PostOrder(0);

	return 0;
}

다시 생각해 볼 점

  1. 순회 (Traversal) -> 재귀