附上蒟蒻代码
#include <bits/stdc++.h>
using namespace std;
bool flag = false;
struct Tree{
int data;
Tree *l;
Tree *r;
bool emp;
Tree(){
l = NULL;
r = NULL;
emp = true;
}
Tree(int n){
data = n;
l = NULL;
r = NULL;
emp = false;
}
}*root;
int f(int k){
int n = 1;
for(int i = 0; i < k; i++)
n *= 10;
return n;
}
void addt(string st){
const char *s = st.c_str();
for(int p = 0; s[p-1] != ','; p++){
if(s[p] != ',')
continue;
int n = 0, k = 0;
for(int i = p-1; s[i] != '('; i--, k++)
n += (s[i]-'0')*f(k);
if(s[p+1] == ')'){
if(!root->emp){
flag = true;
break;
}
root->data = n;
root->emp = false;
break;
}
Tree *q = root;
for(int i = p+1; s[i] != ')'; i++){
if(s[i] == 'L'){
if(!q->l)
q->l = new Tree();
q = q->l;
}
if(s[i] == 'R'){
if(!q->r)
q->r = new Tree();
q = q->r;
}
}
if(!q->emp){
flag = true;
break;
}
q->data = n;
q->emp = false;
}
}
void bfs(){
queue<Tree*> Q;
bool first = true;
Q.push(root);
while(!Q.empty()){
if(first){
first = false;
cout << Q.front()->data;
}else
cout << " " << Q.front()->data;
if(Q.front()->l)
Q.push(Q.front()->l);
if(Q.front()->r)
Q.push(Q.front()->r);
Q.pop();
}
}
void del(Tree *p = root){
if(!p)
return;
del(p->l);
del(p->r);
delete p;
}
bool find(Tree *p = root){
bool f = false;
if(p->emp)
return true;
if(p->l)
f = find(p->l);
if(f)
return f;
if(p->r)
f = find(p->r);
return f;
}
int main(){
string s;
bool first = true;
root = new Tree();
while(cin >> s){
if(s == "()"){
if(first)
first = false;
else
cout << endl;
if(find() || flag){
cout << "not complete";
flag = false;
}else{
bfs();
del();
}
root = new Tree();
}else{
addt(s);
}
}
return 0;
}