您的位置:首页 > 其它

算法竞赛入门经典第六章例题6-7 Trees on the level UVA - 122

2018-01-21 20:45 585 查看
https://vjudge.net/problem/UVA-122

#include<iostream>
#include<string>
#include<deque>
#include<cstring>
using namespace std;
#pragma warning(disable:4996)
struct node {
int data;
int l, r;
int cnt;
};
node all[500];
char ss[500];
int d,top;
int main() {
#ifdef _DEBUG
//freopen("in", "r", stdin);
//freopen("out", "wb", stdout);
#endif // _DEBUG
string s;bool _t = true;
while (cin>>s) {
if (s == "()") {
deque<int> que,ans;
que.push_back(0);
if (all[0].cnt != 1) _t = false;
while (!que.empty()) {
if (!_t) break;
ans.push_back(que.front()); que.pop_front();
if (all[ans.back()].l) {
if (all[all[ans.back()].l].cnt != 1) _t = false;
que.push_back(all[ans.back()].l);
}
if (all[ans.back()].r) {
if (all[all[ans.back()].r].cnt != 1) _t = false;
que.push_back(all[ans.back()].r);
}
}
if (_t) {
int flag = 0;
for (auto x : ans) {
if (flag++) printf(" %d", all[x].data);
else  printf("%d", all[x].data);
}
printf("\n");
}
else printf("not complete\n");
memset(all, 0, sizeof(all));
_t = true; top = 0;
}
else {
s[s.find(',')] = ' ';
sscanf(s.c_str()+1,"%d %s", &d, ss);
int Len = strlen(ss),p=0;
for (int i = 0; i < Len-1; ++i) {
if (ss[i] == 'L') {
if (all[p].l) p = all[p].l;
else p = all[p].l = ++top;
}
else {
if (all[p].r) p = all[p].r;
else p = all[p].r = ++top;
}
}
all[p].data = d, ++all[p].cnt;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: