반응형

 

<코드>

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;

int N;
char P, L, R;
int parent[26][2];

void preorder(char root) // 전위순회
{
    if (root == '.') return;
    else 
    {
        cout << root;
        preorder(parent[root - 'A'][0]);
        preorder(parent[root - 'A'][1]);
    }
}

void inorder(char root) // 중위순회
{
    if (root == '.') return;
    else 
    {
        inorder(parent[root - 'A'][0]);
        cout << root;
        inorder(parent[root - 'A'][1]);
    }
}

void postorder(char root) // 후위순회
{
    if (root == '.') return;
    else 
    {
        postorder(parent[root - 'A'][0]);
        postorder(parent[root - 'A'][1]);
        cout << root;
    }
}

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

	cin >> N;

	for (int i = 0; i < N; i++)
	{
		cin >> P >> L >> R;
		parent[P - 'A'][0] = L;
		parent[P - 'A'][1] = R;
	}

    preorder('A');
    cout << '\n';

    inorder('A'); 
    cout << '\n';

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

 

풀이 방법

 

전위순회 : 루트 - 왼쪽자식 - 오른쪽자식

중위순회 : 왼쪽자식 - 루트 - 오른쪽자식

후위순회 : 왼쪽자식 - 오른쪽자식 - 루트

 

www.acmicpc.net/problem/1991

 

1991번: 트리 순회

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

www.acmicpc.net

 

반응형

+ Recent posts