蒟蒻求助(┬_┬) 题号UVa122
  • 板块题目总版
  • 楼主Radia
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/7/8 20:22
  • 上次更新2023/11/4 18:22:34
查看原帖
蒟蒻求助(┬_┬) 题号UVa122
535447
Radia楼主2021/7/8 20:22

附上蒟蒻代码

#include <bits/stdc++.h>
using namespace std;
bool flag = false;
struct Tree{
	int data;
	Tree *l;
	Tree *r;
	bool emp;
	Tree(){
		l = NULL;
		r = NULL;
		emp = true;
	}
	Tree(int n){
		data = n;
		l = NULL;
		r = NULL;
		emp = false;
	}
}*root;
int f(int k){
	int n = 1;
	for(int i = 0; i < k; i++)
		n *= 10;
	return n;
}
void addt(string st){
	const char *s = st.c_str();
	for(int p = 0; s[p-1] != ','; p++){
		if(s[p] != ',')
			continue;
		int n = 0, k = 0;
		for(int i = p-1; s[i] != '('; i--, k++)
			n += (s[i]-'0')*f(k);
		if(s[p+1] == ')'){
			if(!root->emp){
				flag = true;
				break;
			}
			root->data = n;
			root->emp = false;
			break;
		}
		Tree *q = root;
		for(int i = p+1; s[i] != ')'; i++){
			if(s[i] == 'L'){
				if(!q->l)
					q->l = new Tree();
				q = q->l;
			}
			if(s[i] == 'R'){
				if(!q->r)
					q->r = new Tree();
				q = q->r;
			}
		}
		if(!q->emp){
			flag = true;
			break;
		}
		q->data = n;
		q->emp = false;
	}
}
void bfs(){
	queue<Tree*> Q;
	bool first = true;
	Q.push(root);
	while(!Q.empty()){
		if(first){
			first = false;
			cout << Q.front()->data;
		}else
			cout << " " << Q.front()->data;
		if(Q.front()->l)
			Q.push(Q.front()->l);
		if(Q.front()->r)
			Q.push(Q.front()->r);
		Q.pop();
	}
}
void del(Tree *p = root){
	if(!p)
		return;
	del(p->l);
	del(p->r);
	delete p;
}
bool find(Tree *p = root){
	bool f = false;
	if(p->emp)
		return true;
	if(p->l)
		f = find(p->l);
	if(f)
		return f;
	if(p->r)
		f = find(p->r);
	return f;
}
int main(){
	string s;
	bool first = true;
	root = new Tree();
	while(cin >> s){
		if(s == "()"){
			if(first)
				first = false;
			else
				cout << endl;
			if(find() || flag){
				cout << "not complete";
				flag = false;
			}else{
				bfs();
				del();
			}
			root = new Tree();
		}else{
			addt(s);
		}
	}
	return 0;
}
2021/7/8 20:22
加载中...