본문 바로가기
백준

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

by 당코 2023. 2. 21.

문제

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

 

1991번: 트리 순회

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

www.acmicpc.net

 

접근 방법

트리를 순회하는 방법에 대한 문제이다.

먼저 트리를 구현하는 방법에는 여러 가지가 있는데 그중에서 map으로 트리를 구현하였다.

map의 key에 부모 노드를 저장하고, pair에는 각각 왼쪽 자식과 오른쪽 자식을 저장하였다.

순회는 재귀로 진행하여 자식 노드가 없을 때 종료되게 하였다.

 

코드

#include <iostream>
#include <map>
using namespace std;

int n;
char leftChild, node, rightChild;
map<char, pair<char, char>> tree;

void preorder(char node) {
	cout << node;
	if (tree[node].first != '.') {
		preorder(tree[node].first);
	}
	if (tree[node].second != '.') {
		preorder(tree[node].second);
	}
}

void inorder(char node) {
	if (tree[node].first != '.') {
		inorder(tree[node].first);
	}
	cout << node;
	if (tree[node].second != '.') {
		inorder(tree[node].second);
	}
}

void postorder(char node) {
	if (tree[node].first != '.') {
		postorder(tree[node].first);
	}
	if (tree[node].second != '.') {
		postorder(tree[node].second);
	}
	cout << node;
}

int main() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> node >> leftChild >> rightChild;
		tree[node] = make_pair(leftChild, rightChild);
	}
	preorder('A');
	cout << '\n';
	inorder('A');
	cout << '\n';
	postorder('A');
}

'백준' 카테고리의 다른 글

[백준] C++ 1389번 케빈 베이컨의 6단계 법칙  (0) 2023.02.12
[백준] C++ 1260번 DFS와 BFS  (0) 2023.02.08
[백준] C++ 2257번 화학식량  (0) 2023.02.04
[백준] C++ 1074번 Z  (0) 2023.02.03
[백준] C++ 17219번 비밀번호 찾기  (0) 2023.02.02