#include<bits/stdc++.h> using namespace std; #define MAXN 256+99 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(); } bool failed; void addnode(int v, char* s) { int len = strlen(s); node* u = root; for(int i = 0; i < len; 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;//做标记 } void remove_tree(node* u) {//解决内存泄露(在输入一组新的数据之前,释放上一组无用的数据申请的类存空间 if(u == NULL) return ;//提前判断是否前面有 remove_tree(u->left ); remove_tree(u->right );//释放左右子树的空间 delete u; } char s[MAXN]; bool read_input() { failed = false; remove_tree(root);//在输入这组数据之前释放上一组的 root = newnode(); for(;;) { if(scanf("%s", s) != 1) return false;//输入结束 if(!strcmp(s, "()")) break;//比较s与输入结束标志 int v; sscanf(&s[1], "%d", &v);//从s[1]中读入结点值(一个&引发惨案 addnode(v, strchr(s, ',')+1);//strchr(s, ',')+1 返回字符串s中第一个字符为“,”的后面的指针 (可当做数组 } return true;//可以继续输入 } bool bfs(vector <int>& ans) { queue<node*> q; ans.clear(); q.push(root); while(!q.empty() ) { node* now = q.front() ; q.pop() ; if(!now->have_value ) return false;//是结点,但没有赋过值,表明输入有误 ans.push_back(now->v ); if(now->left != NULL) q.push(now->left ); if(now->right != NULL) q.push(now->right ); } return true; } int main() { vector <int> ans; while(read_input()) { if(!bfs(ans)) failed = 1;//反正failed=1它就是有误 if(failed) printf("not complete\n"); else { for(int i = 0; i < ans.size() ; i++) { if(i != 0) printf(" "); printf("%d", ans[i]); } printf("\n");//当前数据输完了 } } return 0; }