반응형
트리순회를 구현해보는 문제였습니다.
풀이방법
전위순회(preorder) : 루트 -> 왼쪽 자식 -> 오른쪽 자식
중위순회(inorder) : 왼쪽 자식 -> 루트 -> 오른쪽 자식
후위순회(postorder) : 왼쪽 자식 -> 오른쪽 자식 -> 루트
Code
#include <bits/stdc++.h>
using namespace std;
int n, a[26][2];
void preOrder(int x){
if(x == -1) return;
printf("%c",x + 'A');
preOrder(a[x][0]);
preOrder(a[x][1]);
}
void inOrder(int x){
if(x == -1) return;
inOrder(a[x][0]);
printf("%c",x + 'A');
inOrder(a[x][1]);
}
void postOrder(int x){
if(x == -1) return;
postOrder(a[x][0]);
postOrder(a[x][1]);
printf("%c",x + 'A');
}
int main(){
cin >> n;
for(int i = 0; i < n; i++){
char parent, leftChild, rightChild;
cin >> parent >> leftChild >> rightChild;
if(leftChild == '.') a[parent - 'A'][0] = -1;
else a[parent - 'A'][0] = leftChild - 'A';
if(rightChild == '.') a[parent - 'A'][1] = -1;
else a[parent - 'A'][1] = rightChild - 'A';
}
preOrder(0);
cout << '\n';
inOrder(0);
cout << '\n';
postOrder(0);
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 백준(BOJ) 10830번 : 행렬 제곱 답 (1) | 2017.02.20 |
---|---|
(C++) - 백준(BOJ) 1629번 : 곱셈 답 (0) | 2017.02.19 |
(C++) - 백준(BOJ) 2711번 : 오타맨 고창영 (0) | 2016.12.09 |
(C++) - 백준(BOJ) 10170번 : NFC West vs North (0) | 2016.11.10 |
(C++) - 백준(BOJ) 9325번 : 얼마? 답 (0) | 2016.11.10 |