好久没出题了,脑子有点钝了。。。
#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; }