uva122

这道题之前一直WA   主要是因为题目说当节点未赋值  或者同一个节点赋值两次   就输出not complete    而我恰好忽略了后者   导致一直WA   后来看清题目   终于做出来了


下面是代码

#include <iostream>
#include <sstream>
#include <string>
#include <queue>
using namespace std;

struct Node{
	int value;
	Node *left, *right;
	Node(){ value = -1, left = NULL, right = NULL; }
};
Node *root = new Node();
int flag=0;
void init(string);
void slove();
void del(Node*);
int main(){
	string str;
	while (cin >> str){
		if (str != "()")	init(str);
		else   { slove(); del(root); root = new Node(); flag = 0; }
	}
}

void init(string str){
	Node *rt = root;
	for (size_t i = 0; i < str.length(); i++){
		if (str[i] == 'L'){
			if (rt->left == NULL)	 rt->left= new Node(); 
			rt = rt->left; 
		}
		if (str[i] == 'R'){
			if (rt->right == NULL)	rt->right = new Node;
			rt = rt->right;
		}
	}
	if (rt->value != -1) flag = 1;		//如果有个节点出现了两次
	istringstream ss(&str[1]);
	ss >> rt->value;
}

void  slove(){
	if (flag == 1){ cout << "not complete" << endl; return; }
	int ans[300], i = 0;
	queue<Node*>qn;
	qn.push(root);
	while (!qn.empty()){
		Node *temp = qn.front();
		qn.pop();
		if (temp->value == -1){ cout << "not complete" << endl; return; }		//如果有个节点没赋值
		else    ans[i++] = temp->value;
		if (temp->left!=NULL)	qn.push(temp->left);
		if (temp->right!=NULL)	qn.push(temp->right);
	}
	for (int j = 0; j < i; j++){
		if (j)	cout << " ";
		cout << ans[j];
	}
	cout << endl;
}

void del(Node *root){
	if (root!=NULL){
		del(root->left);
		del(root->right);
		delete(root);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值