Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 순열
- Spring
- 도커
- 자바
- 그래프
- HTTP
- 다이나믹프로그래밍
- 스프링
- 그리드 알고리즘
- github action
- dfs
- 재귀
- 자료구조
- AWS
- BFS
- 분할 정복
- 역방향 반복자
- 알고리즘
- 백준
- GIT
- SQL
- 다이나믹 프로그래밍
- TCP
- 그리드
- 트리
- 브루트포스
- CI/CD
- 이분탐색
- 컴퓨터 네트워크
- 분할정복
Archives
- Today
- Total
코딩성장스토리
백준 1991번:트리 순회 본문
https://www.acmicpc.net/problem/1991
1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파
www.acmicpc.net
이 문제는 트리 순회를 정석 문제이다.
전위순회, 중위순회,후위순회 를 구하는 문제이고
나는 배열 A[i][0]을 i의 왼쪽노드 A[i][1]을 i의 오른쪽 노드로 정하고 시작하였다.
#include<iostream>
#include <queue>
#include <cstdio>
using namespace std;
#pragma warning(disable : 4996)
char a[26][2];
void preorder(char x) { //전위순회
if (x == '.') //탈출조건 .일경우 노드 없는것 리턴
return;
cout << x;
preorder(a[x-'A'][0]);
preorder(a[x - 'A'][1]);
}
void inorder(char x) { //중위순회
if (x == '.')
return;
inorder(a[x - 'A'][0]);
cout << x;
inorder(a[x - 'A'][1]);
}
void postorder(char x) { //후위순회
if (x == '.') {
return;
}
postorder(a[x - 'A'][0]);
postorder(a[x - 'A'][1]);
cout << x;
}
int main() {
int n;
cin >> n;
while (n--) {
char p, cr, cl;
cin >> p >> cl >> cr;
int x = p - 'A';
a[x][0] = cl; //왼쪽노드 입력
a[x][1] = cr; //오른쪽 노드 입력
}
preorder('A');
cout << '\n';
inorder('A');
cout << '\n';
postorder('A');
return 0;
}
'백준 코딩' 카테고리의 다른 글
백준 1167번: 트리의 지름 (0) | 2021.10.18 |
---|---|
백준 11725번: 트리의 부모 찾기 (0) | 2021.10.18 |
백준 2146번:다리 만들기 (0) | 2021.10.09 |
백준2178번:미로 탐색 (0) | 2021.10.08 |
백준 2667번:단자번호붙이기 (0) | 2021.10.07 |