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