티스토리 뷰

반응형

https://www.acmicpc.net/problem/1991

 

1991번: 트리 순회

첫째 줄에는 이진 트리의 노드의 개수 N(1≤N≤26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 영문자

www.acmicpc.net

 


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 트리
  • 재귀

 


 

⊙ 문제 접근 과정

 

트리 구현은 깔끔한 코드를 구글링을 통해 가져왔다.

전위, 중위, 후위 트리 개념만 알고 있다면 코드가 눈에 읽힐 것이다.


 

⊙ 문제 풀이

 

#include <iostream>
#include <string>

using namespace std;

class Tree {
    string data;
    Tree *left, *right;
    public:
    Tree() {data=""; left=NULL;right=NULL;}
    void setData(char data) {this->data=data;}
    void setLeft(Tree *left) {this->left=left;}
    void setRight(Tree *right) {this->right=right;}
    void static preorder(Tree *root) {
        if (root) {
            cout << root->data;
            preorder(root->left);
            preorder(root->right);
        }
    }
    void static inorder(Tree *root) {
        if (root) {
            inorder(root->left);
            cout << root->data;
            inorder(root->right);
        }
    }
    void static postorder(Tree *root) {
        if (root) {
            postorder(root->left);
            postorder(root->right);
            cout << root->data;
        }
    }
};

int main() {
    int n;
    cin >> n;
    Tree *tree = new Tree[n+1];

    for (int i=0;i<n;i++) {
        char data,left,right;
        cin >> data >> left >> right;
        if(data!='.')
            tree[(int)(data-'A')].setData(data);
        if(left!='.')
            tree[(int)(data - 'A')].setLeft(&tree[(int)(left - 'A')]);
        else
            tree[(int)(data - 'A')].setLeft(NULL);
        if (right != '.')
            tree[(int)(data - 'A')].setRight(&tree[(int)(right - 'A')]);
        else
            tree[(int)(data - 'A')].setRight(NULL);
    }
    Tree *root = &tree[0];
    Tree::preorder(root);
    cout << "\n";
    Tree::inorder(root);
    cout << "\n";
    Tree::postorder(root);
    cout << "\n";
}

⊙ 결과

 


⊙ 마무리

 

 

NONE

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함