这道题之前一直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);
}
}