题目链接如下:
我的代码如下(tot 是目前没有赋值的node数目):
#include <iostream>
#include <string>
#include <cstdlib>
#include <vector>
// #define debug
struct node{
int key = -1;
node* left = nullptr;
node* right = nullptr;
};
std::string str, path;
node* root;
node* curr;
bool flag;
int tot;
void parse(std::string &ss){
ss = ss.substr(1, ss.size() - 2);
int loc = ss.find(",");
int k = atoi(ss.c_str());
path = ss.substr(loc + 1);
curr = root;
for (int i = 0; i < path.size(); ++i){
if (path[i] == 'L'){
if (!curr->left){
node* temp = new node;
curr->left = temp;
tot++;
}
curr = curr->left;
} else {
if (!curr->right){
node* temp = new node;
curr->right = temp;
tot++;
}
curr = curr->right;
}
}
if (curr->key != -1 && curr->key != k){
flag = false;
} else {
if (curr->key == -1){
tot--;
}
curr->key = k;
}
}
int main(){
#ifdef debug
freopen("0.txt", "r", stdin);
freopen("1.txt", "w", stdout);
#endif
while (std::cin >> str){
root = new node;
flag = true;
tot = 1;
do {
if (flag){
parse(str);
}
} while (std::cin >> str && str != "()");
if (!flag || tot){
printf("not complete\n");
delete root;
continue;
}
std::vector<node*> vec;
vec.push_back(root);
for (int i = 0; i < vec.size(); ++i){
printf("%d", vec[i]->key);
if (vec[i]->left){
vec.push_back(vec[i]->left);
}
if (vec[i]->right){
vec.push_back(vec[i]->right);
}
printf("%s", i == vec.size() - 1 ? "\n" : " ");
}
delete root;
}
#ifdef debug
fclose(stdin);
fclose(stdout);
#endif
return 0;
}