9도 노트의 수평 인쇄 두 갈래 나무

2513 단어
제목.
제목 1523: 위에서 아래로 두 갈래 나무 인쇄
시간 제한: 1초
메모리 제한: 128메가
특수 판제:아니오
제출: 18
해결
제목 설명:
두 갈래 나무의 각 노드를 위에서 아래로 인쇄하고, 같은 층의 노드는 왼쪽에서 오른쪽으로 인쇄합니다.
입력:
입력에는 EOF로 끝나는 여러 테스트 샘플이 포함될 수 있습니다.모든 테스트 사례에 입력할 첫 번째 줄의 정수 n(1<=n<=1000, n은 입력할 두 갈래 트리 요소의 개수를 나타낸다(노드는 1부터 번호를 매긴다).다음 줄에는 n개의 숫자가 있는데, 이것은 i번째 두 갈래 나무 노드의 원소의 값을 대표한다.다음은 n 줄이 있고 줄마다 알파벳 Ci가 있습니다.Ci='d'는 i번째 노드에 두 명의 아이가 있는데 그 다음은 왼쪽 아이의 번호와 오른쪽 아이의 번호이다.Ci='l'은 i번째 노드에 왼쪽 아이가 있고 그 다음은 왼쪽 아이의 번호를 나타낸다.Ci='r'는 i번째 노드에 오른쪽 아이가 있고 그 다음은 오른쪽 아이의 번호를 나타낸다.Ci='z'는 첫 번째 노드에 자식이 없다는 것을 나타낸다.
출력:
모든 테스트 사례에 대응하여 위에서 아래로 왼쪽에서 오른쪽으로 두 갈래 나무 노드의 값을 출력합니다.
샘플 입력:
7
8 6 5 7 10 9 11
d 2 5
d 3 4
z
z
d 6 7
z
z

샘플 출력:
8 6 10 5 7 9 11

분석하다.
유사한 광도 우선 검색 방법으로
다른 것은 여기에vector로 옮겨다니는 노드 번호를 저장합니다
어떤 노드를 검색한 후 이 노드의 하위 노드를 push백에서 벡터로
코드
#include <iostream>
#include <vector>
#include <string>
struct Node{
    int value;
    int lid;
    int rid;
};
std::vector<Node> vn;
std::vector<int> v; //         
void Bsearch(){
    v.push_back(1);
    std::vector<int>::size_type vid = 0;;
    while(vid!=v.size()){
        int nodeId = v.at(vid)-1;//      -1
        std::cout<<vn.at(nodeId).value;
        if(vn.at(nodeId).lid){      
            v.push_back(vn.at(nodeId).lid);
        }
        if(vn.at(nodeId).rid){  
            v.push_back(vn.at(nodeId).rid);
        }
        if(vid<v.size()-1)
            std::cout<<" ";
         else
            std::cout<<std::endl;
        vid++;
    }
}
 
void judo(int n){
    if(n==0){
        std::cout<<"NULL"<<std::endl;
        return;
    }
    Node nd;
    nd.lid = 0;
    nd.rid = 0;
    for(int i = 0;i<n;i++){
        std::cin>>nd.value;
        vn.push_back(nd);
    }
 
    std::string ci;
    for(int i = 0;i<n;i++){
        std::cin>>ci;
        switch (ci[0]){
        case 'd':
            std::cin>>vn.at(i).lid>>vn.at(i).rid;
            break;
        case 'r':
            std::cin>>vn.at(i).rid;
            break;
        case 'l':
            std::cin>>vn.at(i).lid;
            break;
        case 'z':
            break;
        }
    }
    Bsearch();
 
}
 
int main() {
    int n;
    while(std::cin>>n){
        judo(n);
    }
    return 0;
}

좋은 웹페이지 즐겨찾기