好久没出题了,脑子有点钝了。。。
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
struct Node {
int value;
Node* Ltree;
Node* Rtree;
};
Node* root;
bool failed;
Node* new_node() {
return new Node();
}
void addnode(int v, char* s) {
Node* u = root;
int n = strlen(s);
for(int i = 0; i < n; i++)
if(s[i] == 'L') {
if(u -> Ltree == NULL) u -> Ltree = new_node();
u = u -> Ltree;
} else if(s[i] == 'R') {
if(u -> Rtree == NULL) u -> Rtree = new_node();
u = u -> Rtree;
}
if(u -> value) failed = true;
u -> value = v;
}
bool read_input() {
failed = false;
char cmd[10];
root = new_node();
for(;;) {
if(scanf("%s", cmd) != 1) return false;
if(!strcmp(cmd, "()")) break;
int v;
sscanf(cmd + 1, "%d", &v);
addnode(v, strchr(cmd, ',') + 1);
}
return true;
}
bool bfs(vector<int>& ans) {
ans.clear();
queue<Node* > q;
q.push(root);
while(!q.empty()) {
Node* u = q.front(); q.pop();
if(!u -> value) return false;
ans.push_back(u -> value);
if(u -> Ltree != NULL) q.push(u -> Ltree);
if(u -> Rtree != NULL) q.push(u -> Rtree);
}
return true;
}
void remove_node(Node* tree) {
if(tree == NULL) return ;
remove_node(tree -> Ltree);
remove_node(tree -> Rtree);
delete tree;
}
int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif // ONLINE_JUDGE
while(read_input()) {
vector<int> ans;
if(bfs(ans)&& !failed)
for(int i = 0; i < ans.size(); i++)
i ? cout << " " << ans[i] : cout << ans[i];
else cout << "not complete";
cout << endl;
remove_node(root);
}
return 0;
}
#include<iostream>