https://www.acmicpc.net/problem/1991
노드 구성 부분에서 막혀서 하단 링크의 코드 참조하였습니다. 문제시 삭제
https://im-gonna.tistory.com/90
[백준] 1991번 C++ "트리 순회" 풀이 / 트리, 전위-중위-후위 순회
https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가
im-gonna.tistory.com
소스 코드
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;
//https://im-gonna.tistory.com/90 참조
vector<vector<int>> tree;
// 전위 순회
void preorder_t(int idx)
{
if (idx <= -1)
{
return;
}
else
{
cout << (char)('A' + idx);
preorder_t(tree[idx][0]);
preorder_t(tree[idx][1]);
}
}
// 중위 순회
void inorder_t(int idx)
{
if (idx <= -1)
{
return;
}
inorder_t(tree[idx][0]);
cout << (char)('A' + idx);
inorder_t(tree[idx][1]);
}
// 후위 순회
void postorder_t(int idx)
{
if (idx <= -1)
{
return;
}
postorder_t(tree[idx][0]);
postorder_t(tree[idx][1]);
cout << (char)('A' + idx);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
tree.resize(n);
for (int i = 0; i < n; i++)
{
char node;
char lnode;
char rnode;
cin >> node >> lnode >> rnode;
int nd = node - 'A';
if (lnode!= '.')
{
int nd = node - 'A';
tree[nd].push_back(lnode - 'A');
}
else
{
tree[nd].push_back(-1);
}
if (rnode != '.')
{
tree[nd].push_back(rnode - 'A');
}
else
{
tree[nd].push_back(-1);
}
}
preorder_t(0);
cout << "\n";
inorder_t(0);
cout << "\n";
postorder_t(0);
}'백준 > 실버' 카테고리의 다른 글
| [백준 3758] - KCPC(C++) (0) | 2026.02.23 |
|---|---|
| [백준 1158] - 요세푸스 문제(C++) (1) | 2025.12.16 |
| [백준 4659] - 비밀번호 발음하기(C++) (1) | 2025.08.19 |
| [백준 24446] - 알고리즘 수업 - 너비 우선 탐색 3 (C++) (0) | 2025.06.05 |
| 백준 [13022] - 늑대와 올바른 단어 (c++) (0) | 2025.03.17 |