Boj

[Boj] 백준 C++ #1991 트리 순회

ima9ine4 2024. 1. 5. 11:13
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