코딩스터디

1231. [S/W 문제해결 기본] 9일차 - 중위순회

애플앤마블 2019. 5. 15. 21:30
반응형
SMALL

Tree by Chiara Rossi from the Noun Project

이 문제는 swexpertacademy P.1231 문제임을 알립니다.

 

또한 패스트 캠퍼스 수강자이며 안경잡이개발자 나동빈님의 강의를 보고 활용하여 푼 것이므로 

 

안경잡이 개발자 님의 블로그를 링크 할테니 많이 가서 좋은 배움 얻으시길 바랍니다.

 

https://blog.naver.com/ndb796

 

안경잡이개발자 : 네이버 블로그

2017 대한민국 인재상 SW 마에스트로 9기 BoB 6기 보안컨설팅 트랙 에듀캐스트 Unity 강사 < 강의 문의 > ndb796@naver.com 카카오톡 : blow796

blog.naver.com

중위 순회 알고리즘을 가져와 풀었는데 문제를 보면 주어진 node의 갯수에 따라 몇번 째 번호에 이를 시 입력을 각각 다르게 받으며

 

node의 갯수가 짝수인지 홀수인지 또한 구분하여야 합니다.

 

이는 input.txt를 보게 되면 판별할 수 있습니다.

#include<iostream>
using namespace std;
int number;
typedef struct node *treePointer;
typedef struct node {
    char data;
    treePointer leftChild, rightChild;
} node;

void inorder(treePointer ptr){
    if(ptr){
        inorder(ptr->leftChild);
        cout<<ptr->data;
        inorder(ptr->rightChild);
    }
}

int main(void){
    for(int t=1; t<=10; t++){
        cout<<"#"<<t<<' ';
        cin>>number;
        node nodes[number+1];
        int N;
        char C;
        for(int i=1; i<=number; i++){
            if(number%2==0){
                if(i<number/2){
                    cin>>N>>C>>N>>N;
                    nodes[i].data = C;
                    nodes[i].leftChild = NULL;
                    nodes[i].rightChild = NULL;
                }
                else if (i==number/2){
                    cin>>N>>C>>N;
                    nodes[i].data = C;
                    nodes[i].leftChild = NULL;
                    nodes[i].rightChild = NULL;
                }
                else {
                    cin>>N>>C;
                    nodes[i].data = C;
                    nodes[i].leftChild = NULL;
                    nodes[i].rightChild = NULL;
                }
            }
            else{
                if(i<=number/2){
                    cin>>N>>C>>N>>N;
                    nodes[i].data = C;
                    nodes[i].leftChild = NULL;
                    nodes[i].rightChild = NULL;
                }
                
                else {
                    cin>>N>>C;
                    nodes[i].data = C;
                    nodes[i].leftChild = NULL;
                    nodes[i].rightChild = NULL;
                }
            }
        }
        for(int i=1; i<=number; i++){
            if(i%2==0)
                nodes[i/2].leftChild = &nodes[i];
            else
                nodes[i/2].rightChild = &nodes[i];
        }
        inorder(&nodes[1]);
        cout<<'\n';
    }
    return 0;
}

 

반응형
LIST