学到很多,虽然还不能完全领悟,不过以后在做题中再慢慢消化吧~
#include<cstdio>
#include<cstring>#include<vector>
#include<queue>
#include<iostream>
using namespace std;
const int maxn = 300;
bool failed;
char s[maxn];
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 remove_tree(Node*u) {
if(u==NULL) return ;
remove_tree(u->left);
remove_tree(u->right);
delete u;
}
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_input(){
failed =false;
remove_tree(root);
root = newnode();
for(;;) {
if(!(cin>>s)) 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;
}
vector<int > bbs;
int main(){
while(1){
if(!read_input()) break;
int kase=0;
if(bfs(bbs)&&!failed){
vector<int>::iterator it;
for(it=bbs.begin();it!=bbs.end();it++){
if(kase) cout<<" "<<*it;
else cout<<*it; kase=1;
} printf("\n");
}else printf("not complete\n");
}
return 0;
}