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 |
Tags
- SQL
- 다이나믹프로그래밍
- 컴퓨터 네트워크
- 알고리즘
- 스프링
- 이분탐색
- CI/CD
- 그래프
- 그리드 알고리즘
- 도커
- AWS
- 순열
- GIT
- 백준
- 그리드
- 분할 정복
- 재귀
- 다이나믹 프로그래밍
- 브루트포스
- github action
- 트리
- HTTP
- dfs
- 분할정복
- TCP
- BFS
- Spring
- 자료구조
- 역방향 반복자
- 자바
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 |