9도 노트의 수평 인쇄 두 갈래 나무
제목 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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.