题目描述
输入格式
输出格式
【输入样例】
(11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) () (3,L) (4,R) ()
【输出样例】
5 4 8 11 13 4 7 2 1 not complete
#include <iostream>
#include <queue>
#include <vector>
#include <cstring>
#define maxn 10000
using namespace std;
bool falsed;
char s[maxn];
struct Node
{
bool have_value;
int v;
Node *left, *right;
Node() : have_value(false), left(NULL), right(NULL){};
};
Node *root;
void addnode(int, char *);
Node *newnode()
{
return new Node();
}
bool read_input()
{
falsed = 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;
}
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;
}
if (s[i] == 'R')
{
if (u->right == NULL)
{
u->right = newnode();
}
u = u->right;
}
}
if (u->have_value)
{
falsed = true;
}
u->v = v;
u->have_value = true;
}
bool bfs(vector<int> &ans)
{
queue<Node *> q;
ans.clear();
q.push(root);
while (!q.empty())
{
Node *u = q.front();
q.pop();
if (!u->have_value)
{
return false;
}
ans.push_back(u->v);
if (u->left != NULL)
{
q.push(u->left);
}
if (u->right != NULL)
{
q.push(u->right);
}
}
return true;
}
void remove_tree(Node *u)
{
if (u == NULL)
{
return;
}
remove_tree(u->left);
remove_tree(u->right);
delete u;
}
int main()
{
read_input();
vector<int> ans;
if (bfs(ans) == true)
{
for (vector<int>::iterator i = ans.begin(); i != ans.end(); ++i)
{
cout << *i << " ";
}
cout << endl;
}
else
{
cout << "not complete" << endl;
}
system("pause");
return 0;
}