题目描述
建立节点,并使用BFS输出。
代码实现
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <queue>
#define maxn 256
using namespace std;
// (11,LL) (7,LLL) (8,R) (5, ) (4, L) (13, RL) (2, LLR) (1, RRR) (4, RR) () (3, L) (4, R) ()
struct NODE{
bool have_value;
int v;
NODE *left, *right;
NODE():have_value(false), left(NULL), right(NULL){}
};
NODE* root;
char s[maxn];
bool failed;
NODE* newnode() { return new NODE(); }
void remove_tree(NODE * u) {
if(u == NULL) return;
remove_tree(u->left);
remove_tree(u->right);
delete u;
}
void addnode(int v, char* s) {
int n = strlen(s);
NODE* u = root;
for (int i = 0; i < n; i++) {
if (s[i] == 'L') {
if (u->left == NULL) u->left = newnode();
u = u->left;
}
else if (s[i] == 'R') {
if (u->right == NULL) u->right = newnode();
u = u->right;
}
if (u->have_value) failed = true;
if (!u->have_value) u->v = v;
u->have_value = true;
}
}
bool read_input() {
failed = false;
root = newnode();
for (;;) {
if (scanf("%s", s) != 1) return false;
if (!strcmp(s, "()")) break;
int v;
sscanf(&s[1], "%d", &v);
addnode(v, strchr(s, ',') + 1);
}
return true;
}
bool bfs(vector<int>& ans) {
queue<NODE*> q;
ans.clear();
if (root) q.push(root);
while (!q.empty()) {
NODE *tmp = q.front();
q.pop();
ans.push_back(tmp->v);
if (tmp->left) q.push(tmp->left);
if (tmp->right) q.push(tmp->right);
}
return true;
}
int main()
{
vector<int> ans;
if (!read_input())
return 1;
if (bfs(ans)) {
int sz, i;
for (sz = ans.size(), i = 0; i < sz - 1; sz++)
cout << ans[i] << " ";
if (sz) cout << ans[sz - 1] << endl;
}
if (failed) cout << "not complete" << endl;
return 0;
}