记录编号 269684 评测结果 AAAAAAAAAA
题目名称 树的层次遍历 最终得分 100
用户昵称 GravatarOstmbh 是否通过 通过
代码语言 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;
}