728x90
#include <iostream>
using namespace std;
static int tree[26][2];
void preOrder(int now){ // 전위 순회
if(now == -1) return;
cout<<char(now+'A');
preOrder(tree[now][0]);
preOrder(tree[now][1]);
}
void inOrder(int now){ // 중위 순회
if(now == -1) return;
inOrder(tree[now][0]);
cout<<char(now+'A');
inOrder(tree[now][1]);
}
void postOrder(int now){ // 후위 순회
if(now == -1) return;
postOrder(tree[now][0]);
postOrder(tree[now][1]);
cout<<char(now+'A');
}
int main(){
int n; cin>>n;
for(int i=0;i<n;i++){
char root, left, right;
cin>>root>>left>>right;
int rootInt, leftInt, rightInt;
rootInt = root - 'A';
// 'A'는 0으로, 'B'는 1로, ... 'Z'는 25로 변환하여 숫자로 배열에 저장
if(left!='.'){
leftInt = left - 'A';
}else{ // 노드가 없으면 -1을 저장
leftInt = -1;
}
if(right!='.'){
rightInt = right - 'A';
}else{
rightInt = -1;
}
tree[rootInt][0] = leftInt;
tree[rootInt][1] = rightInt;
}
preOrder(0); cout<<endl;
inOrder(0); cout<<endl;
postOrder(0); cout<<endl;
}
아래 강의를 참고하여 작성한 코드입니다 :)
https://www.youtube.com/watch?v=uAt9DpzEBNo&t=1280s
내가 2년 동안 들은 모든 수업 중에서 자료구조 학점이 제일 낮다 ... 그렇게 어려워했던 트리.... 역시 두번째 공부하니까 좀 낫긴하네
재귀를 활용해서 간단하게 순회 함수를 구현할 수 있는게 신기하다.
728x90
반응형
'Boj' 카테고리의 다른 글
[Boj] 백준 C++ #2309 일곱 난쟁이 (0) | 2024.08.08 |
---|---|
[Boj] 백준 C++ #2981 검문 (0) | 2024.01.10 |
[Boj] 백준 C++ #13241 최소공배수 (1) | 2023.12.28 |
[Boj] 백준 C++ #3036 링 (1) | 2023.12.23 |
[Boj] 백준 C++ #1735 분수 합 (1) | 2023.12.22 |