记录编号 |
153934 |
评测结果 |
AAAAAAAAAA |
题目名称 |
树的层次遍历 |
最终得分 |
100 |
用户昵称 |
一個人的雨 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.009 s |
提交时间 |
2015-03-20 14:08:44 |
内存使用 |
0.33 MiB |
显示代码纯文本
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#include<cmath>
#include<string>
using namespace std;
char s[20000];
bool failed,zz=false;
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;
}
void remov(Node*u){
if (u==NULL) return ;
remov(u->left);
remov(u->right);
delete(u);
}
bool init(){
failed=false;
remov(root);
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);
vector <int> ans;
int pd=true,p=true;
while (pd==true){
failed=false;
p=true;
pd=true;
pd=init();
if (failed==true&&pd!=false) cout<<"not complete";
else{
p=bfs(ans);
if (p==false&&pd!=false) cout<<"not complete";
else
for (int i=0;i<ans.size();++i)
cout<<ans[i]<<" ";
}
if (pd==false) return 0;
if (pd!=false) cout<<endl;
}
return 0;
}