1991 트리 순회
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;
}
다시 생각해 볼 점
- 순회 (Traversal) -> 재귀