http://www.bnuoj.com/v3/problem_show.php?pid=17261
(11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) () (3,L) (4,R) ()
Sample Output
5 4 8 11 13 4 7 2 1 not complete
#include <iostream> #include<queue> #include<cstdio> #include<cstring> #include<vector> using namespace std; const int maxn=100000+10; struct Node { bool have_value; int v; Node *left,*right; Node():have_value(false),left(NULL),right(NULL) {} }; Node* root; bool failed; 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(;;) { char s[10000]; 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() { while(read_input()) { vector<int>ans; if(!failed&&bfs(ans)) { for(int i=0; i<ans.size()-1; i++ ) cout<<ans[i]<<" "; cout<<ans[ans.size()-1]<<endl; } else cout<<"not complete"<<endl; } return 0; }