레야몬

[C++] 1991번 트리 순회 - 트리 본문

알고리즘/백준

[C++] 1991번 트리 순회 - 트리

Leyamon 2022. 9. 3. 00:05

#include <iostream>

#define MAX_VERTEX 'Z'+1

using namespace std;

pair<char, char> tr[MAX_VERTEX];  //이진 트리
int N;  //이진 트리의 노드의 개수

void f(char Node)
{
    cout << Node;
    if(tr[Node].first!='.')  //왼쪽부터 BFS
        f(tr[Node].first);
    if(tr[Node].second!='.')
        f(tr[Node].second);
}

void m(char Node)
{
    if(tr[Node].first!='.')  //자신의 노드를 스택에 저장하고 아래로 내려가기
        m(tr[Node].first);
    cout << Node;
    if(tr[Node].second!='.')
        m(tr[Node].second);
}

void b(char Node)
{
    if(tr[Node].first!='.')  //자신의 노드를 스택에 저장하고 아래로 내려가기
        b(tr[Node].first);
    if(tr[Node].second!='.')
        b(tr[Node].second);
    cout << Node;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    
    cin >> N;
    
    for(int i=0; i<N; i++) {
        char u, v, b;  //부모 노드 u, 자식 노드 v, b;
        
        cin >> u >> v >> b;
        tr[u] = {v, b};  //왼쪽 노드, 오른쪽 노드
    }
    f('A'); cout << '\n';
    m('A'); cout << '\n';
    b('A');  //앞: front, 중간: mid, 뒤: behind
    
    return 0;
}

 

계속 하다보니 알게 된 사실인데 저번 주 까지만 해도 어렵던 실버가 이제는 쉽게 느껴진다. 이렇게 문제만 풀고도 실력이 늘 수 있던 거였나...? 난 맨처음에 스택을 써야 하는 줄 알았는데 곰곰히 생각해보니 그럴 필요도 없었던 것 같다. ㅋㅋ 참고한 사이트는 아래에 있다.

 

 

<트리 순회>

https://m.blog.naver.com/rlakk11/60159303809

 

[자료구조] 트리(Tree)의 개념 및 전위순회, 중위순회, 후위순회, 층별순회

안녕하세요! ㅋㅋ 자료구조는 아직 포스팅할 예정이 없었는데 매틀랩 자료를 올리려다 보니 트리에 대한 개...

blog.naver.com

 

 

 

 

 

※현재 고등학교 등교중인 학생입니다. 이제 알고리즘을 본격적으로 공부하기 시작해서 아직 초보입니다. 혹시 제가 잘못 알고있는 점이나 더 좋은 풀이 방법이 있어 댓글에 남겨주시면 감사히 하나하나 열심히 읽어보겠습니다. 좋아요, 단순한 댓글 한마디라도 저에겐 큰 힘이 됩니다! 감사합니다

Comments