记录编号 |
269684 |
评测结果 |
AAAAAAAAAA |
题目名称 |
树的层次遍历 |
最终得分 |
100 |
用户昵称 |
Ostmbh |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.003 s |
提交时间 |
2016-06-13 20:51:39 |
内存使用 |
0.31 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <string>
using namespace std;
#define maxn 1010
char s[maxn];
int failed;
vector<int>A;
struct Node{
bool have_value;
int v;
Node *left,*right;
Node():have_value(false),left(NULL),right(NULL){}
};
Node* root;
Node* newnode(){
return new Node();
}
void addnode(int v,char* s){
int n=strlen(s);
Node* u=root;
for(int i=0;i<n;i++)
if(s[i]=='L'){
if(u->left==NULL)
u->left=newnode();
u=u->left;
}
else
if(s[i]=='R'){
if(u->right==NULL)
u->right=newnode();
u=u->right;
}
if(u->have_value)
failed=true;
u->v=v;
u->have_value=true;
}
bool read(){
failed=false;
root=newnode();
for(;;){
if(scanf("%s",s)!=1)
return false;
if(!strcmp(s,"()"))
break;
int v;
sscanf(&s[1],"%d",&v);
addnode(v,strchr(s,',')+1);
}
return true;
}
bool bfs(vector<int>& ans){
queue<Node*>q;
ans.clear();
q.push(root);
while(!q.empty()){
Node* u=q.front();
q.pop();
if(!u->have_value)
return false;
ans.push_back(u->v);
if(u->left!=NULL)
q.push(u->left);
if(u->right!=NULL)
q.push(u->right);
}
return true;
}
int main(){
freopen("vlevel.in","r",stdin);
freopen("vlevel.out","w",stdout);
while(read()){
if(!bfs(A)||failed)
cout<<"not complete"<<endl;
else {
for(int i=0;i<A.size();i++)
cout<<A[i]<<' ';
cout<<endl;
}
}
return 0;
}