uva 122
程序员文章站
2022-06-02 22:13:42
...
#include <iostream>
#include <vector>
#include <cstdio>
#include <queue>
using namespace std;
struct node{
bool vis;
int val;
node *l, *r;
node():vis(false), l(NULL), r(NULL){}
};
node* newnode(){
return new node();
}
node *root;
int flag;
void addnode(int v, int q, string s)
{
int len = s.size();
node* u = root;
for(int i = q; i < len; i++){
//cout << s[i] << " ";
if(s[i] == 'L'){
if(u -> l == NULL){
u -> l = newnode();
}
u = u -> l;
} else if(s[i] == 'R'){
if(u -> r == NULL) u -> r = newnode();
u = u -> r;
}
}
if(u -> vis) flag = 1;
u -> val = v;
u -> vis = true;
}
vector <int> ans;
bool bfs()
{
queue<node*> q;
ans.clear();
q.push(root);
while(!q.empty()){
node *u = q.front();
q.pop();
if(!u -> vis) return false;
ans.push_back(u -> val);
//cout << u -> val << endl;
if (u->l != NULL)q.push(u->l);
if (u->r != NULL)q.push(u->r);
}
return true;
}
int main()
{
size_t q;
string s;
root = new node();
while(cin >> s)
{
if(s == "()"){
// if(bfs() == false) cout << "here1";
// if(flag) cout << "here2";
if(bfs() == false || flag) cout << "not complete" << endl;
else{
int len = ans.size();
for(int i = 0; i < len; i++){
if(i == len - 1) cout << ans[i] <<endl;
else cout <<ans[i] << " ";
}
}
flag = 0;
root = new node();
// cout << flag << endl;
} else{
int v;
sscanf(&s[1], "%d", &v);
int q = s.find(',');
addnode(v, q+1, s);
}
}
}
哇 这个模拟总算写出来了,纪念一发, 这个题里用了string的find , sscanf真的挺好用的。。还兼容string, 要注意多组数据的更新, 本程序并未处理紫书上说的 内存泄漏以后在改吧。
推荐阅读
-
破损的键盘(悲剧文本)(Broken Keyboard(a.k.a. Beiju Text),Uva 11988)
-
笑话集原创笑话精品展第122期
-
集合栈计算机(The SetStack Computer, ACM/ICPC NWERC 2006,Uva12096)
-
爆笑之逗B剧场第122季
-
10名开外!DXO公布iPhone 12 mini相机成绩:122 分
-
唯一的雪花(Unique snowflakes,UVa 11572)滑动窗口+set
-
[UVA - 11584] Partitioning by Palindromes dp预处理
-
雷军:小米11 Ultra再次突破高端 DXO霸榜第一122天
-
UVA227-Puzzle
-
UVA 442 Matrix Chain Multiplication ( stack 应用)