#include <bits/stdc++.h>
using namespace std;
/* A binary tree node has data, pointer to left child
and a pointer to right child */
struct Node
{
int data;
struct Node* left;
struct Node* right;
};
/* Helper function that allocates a new node with the
given data and NULL left and right pointers. */
struct Node* newNode(int data)
{
struct Node* node = new Node;
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
void serialize(Node *root,vector<int> &);
Node * deSerialize(vector<int> &);
/* Computes the number of nodes in a tree. */
int height(struct Node* node)
{
if (node==NULL)
return 0;
else
return 1 + max(height(node->left), height(node->right));
}
void inorder(Node *root)
{
if (root == NULL)
return;
inorder(root->left);
cout << root->data << " ";
inorder(root->right);
}
/* A binary tree node has data, pointer to left child
and a pointer to right child
struct Node
{
int data;
Node* left;
Node* right;
}; */
/*this function serializes
the binary tree and stores
it in the vector A*/
void serialize(Node *root,vector<int> &A)
{
if(root == NULL)
{
A.push_back(-1);
return;
}
A.push_back(root->data);
serialize(root->left,A);
serialize(root->right,A);
}
/*this function deserializes
the serialized vector A*/
int ind = 0;
Node * deSerialize(vector<int> &A)
{
if(ind == A.size()-1 || A[ind] == -1)
{
ind += 1;
cout<<"hai";
return NULL;
}
Node *root = newNode(A[ind]);
ind += 1;
root->left = deSerialize(A);
root->right= deSerialize(A);
return root;
}
/* Driver program to test size function*/
int main()
{
int t;
scanf("%d\n", &t);
while (t--)
{
map<int, Node*> m;
int n;
scanf("%d",&n);
int N = n;
struct Node *root = NULL;
struct Node *child;
while (n--)
{
Node *parent;
char lr;
int n1, n2;
scanf("%d %d %c", &n1, &n2, &lr);
if (m.find(n1) == m.end())
{
parent = newNode(n1);
m[n1] = parent;
if (root == NULL)
root = parent;
}
else
parent = m[n1];
child = newNode(n2);
if (lr == 'L')
parent->left = child;
else
parent->right = child;
m[n2] = child;
}
vector<int> A;
A.clear();
serialize(root,A);
// for(int i=0;i<A.size();i++)
// cout<<A[i]<<" ";
// cout<<endl;
// inorder(root);
//cout<<endl;
Node *tree_made = deSerialize(A);
inorder(tree_made);
cout<<endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovKiBBIGJpbmFyeSB0cmVlIG5vZGUgaGFzIGRhdGEsIHBvaW50ZXIgdG8gbGVmdCBjaGlsZAogICBhbmQgYSBwb2ludGVyIHRvIHJpZ2h0IGNoaWxkICovCnN0cnVjdCBOb2RlCnsKICAgIGludCBkYXRhOwogICAgc3RydWN0IE5vZGUqIGxlZnQ7CiAgICBzdHJ1Y3QgTm9kZSogcmlnaHQ7Cn07CgovKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBhbGxvY2F0ZXMgYSBuZXcgbm9kZSB3aXRoIHRoZQogICBnaXZlbiBkYXRhIGFuZCBOVUxMIGxlZnQgYW5kIHJpZ2h0IHBvaW50ZXJzLiAqLwpzdHJ1Y3QgTm9kZSogbmV3Tm9kZShpbnQgZGF0YSkKewogIHN0cnVjdCBOb2RlKiBub2RlID0gbmV3IE5vZGU7CiAgbm9kZS0+ZGF0YSA9IGRhdGE7CiAgbm9kZS0+bGVmdCA9IE5VTEw7CiAgbm9kZS0+cmlnaHQgPSBOVUxMOwoKICByZXR1cm4obm9kZSk7Cn0KCnZvaWQgc2VyaWFsaXplKE5vZGUgKnJvb3QsdmVjdG9yPGludD4gJik7CgoKCk5vZGUgKiBkZVNlcmlhbGl6ZSh2ZWN0b3I8aW50PiAmKTsKCi8qIENvbXB1dGVzIHRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gYSB0cmVlLiAqLwppbnQgaGVpZ2h0KHN0cnVjdCBOb2RlKiBub2RlKQp7CiAgaWYgKG5vZGU9PU5VTEwpCiAgICByZXR1cm4gMDsKICBlbHNlCiAgICByZXR1cm4gMSArIG1heChoZWlnaHQobm9kZS0+bGVmdCksIGhlaWdodChub2RlLT5yaWdodCkpOwp9Cgp2b2lkIGlub3JkZXIoTm9kZSAqcm9vdCkKewogICAgaWYgKHJvb3QgPT0gTlVMTCkKICAgICAgIHJldHVybjsKICAgIGlub3JkZXIocm9vdC0+bGVmdCk7CiAgICBjb3V0IDw8IHJvb3QtPmRhdGEgPDwgIiAiOwogICAgaW5vcmRlcihyb290LT5yaWdodCk7Cn0KLyogQSBiaW5hcnkgdHJlZSBub2RlIGhhcyBkYXRhLCBwb2ludGVyIHRvIGxlZnQgY2hpbGQKICAgYW5kIGEgcG9pbnRlciB0byByaWdodCBjaGlsZCAgCnN0cnVjdCBOb2RlCnsKICAgIGludCBkYXRhOwogICAgTm9kZSogbGVmdDsKICAgIE5vZGUqIHJpZ2h0Owp9OyAqLwoKLyp0aGlzICBmdW5jdGlvbiBzZXJpYWxpemVzIAp0aGUgYmluYXJ5IHRyZWUgYW5kIHN0b3JlcyAKaXQgaW4gdGhlIHZlY3RvciBBKi8Kdm9pZCBzZXJpYWxpemUoTm9kZSAqcm9vdCx2ZWN0b3I8aW50PiAmQSkKewogICAgaWYocm9vdCA9PSBOVUxMKQogICAgewogICAgICAgIEEucHVzaF9iYWNrKC0xKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBBLnB1c2hfYmFjayhyb290LT5kYXRhKTsKICAgIHNlcmlhbGl6ZShyb290LT5sZWZ0LEEpOwogICAgc2VyaWFsaXplKHJvb3QtPnJpZ2h0LEEpOwp9CgovKnRoaXMgZnVuY3Rpb24gZGVzZXJpYWxpemVzCiB0aGUgc2VyaWFsaXplZCB2ZWN0b3IgQSovCmludCBpbmQgPSAwOwpOb2RlICogZGVTZXJpYWxpemUodmVjdG9yPGludD4gJkEpCnsKICAgaWYoaW5kID09IEEuc2l6ZSgpLTEgfHwgQVtpbmRdID09IC0xKQogICB7CiAgICAgICBpbmQgKz0gMTsKICAgICAgIGNvdXQ8PCJoYWkiOwogICAgICAgcmV0dXJuIE5VTEw7CiAgIH0KICAgCiAgIE5vZGUgKnJvb3QgPSBuZXdOb2RlKEFbaW5kXSk7CiAgIGluZCArPSAxOwogICByb290LT5sZWZ0ID0gZGVTZXJpYWxpemUoQSk7CiAgIHJvb3QtPnJpZ2h0PSAgZGVTZXJpYWxpemUoQSk7CiAgIHJldHVybiByb290Owp9CgovKiBEcml2ZXIgcHJvZ3JhbSB0byB0ZXN0IHNpemUgZnVuY3Rpb24qLwppbnQgbWFpbigpCnsKICBpbnQgdDsKICBzY2FuZigiJWRcbiIsICZ0KTsKICB3aGlsZSAodC0tKQogIHsKICAgICBtYXA8aW50LCBOb2RlKj4gbTsKICAgICBpbnQgbjsKICAgICBzY2FuZigiJWQiLCZuKTsKICAgICBpbnQgTiA9IG47CiAgICAgc3RydWN0IE5vZGUgKnJvb3QgPSBOVUxMOwogICAgIHN0cnVjdCBOb2RlICpjaGlsZDsKICAgICB3aGlsZSAobi0tKQogICAgIHsKICAgICAgICBOb2RlICpwYXJlbnQ7CiAgICAgICAgY2hhciBscjsKICAgICAgICBpbnQgbjEsIG4yOwogICAgICAgIHNjYW5mKCIlZCAlZCAlYyIsICZuMSwgJm4yLCAmbHIpOwoKICAgICAgICBpZiAobS5maW5kKG4xKSA9PSBtLmVuZCgpKQogICAgICAgIHsKICAgICAgICAgICBwYXJlbnQgPSBuZXdOb2RlKG4xKTsKICAgICAgICAgICBtW24xXSA9IHBhcmVudDsKICAgICAgICAgICBpZiAocm9vdCA9PSBOVUxMKQogICAgICAgICAgICAgcm9vdCA9IHBhcmVudDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgIHBhcmVudCA9IG1bbjFdOwoKICAgICAgICBjaGlsZCA9IG5ld05vZGUobjIpOwogICAgICAgIGlmIChsciA9PSAnTCcpCiAgICAgICAgICBwYXJlbnQtPmxlZnQgPSBjaGlsZDsKICAgICAgICBlbHNlCiAgICAgICAgICBwYXJlbnQtPnJpZ2h0ID0gY2hpbGQ7CiAgICAgICAgbVtuMl0gID0gY2hpbGQ7CiAgICAgfQogICAgdmVjdG9yPGludD4gQTsKICAgIEEuY2xlYXIoKTsKICAgIAogICAgc2VyaWFsaXplKHJvb3QsQSk7CiAgLy8gIGZvcihpbnQgaT0wO2k8QS5zaXplKCk7aSsrKQogICAgLy8gICAgY291dDw8QVtpXTw8IiAiOwogICAgICAvLyAgY291dDw8ZW5kbDsKICAgIC8vIGlub3JkZXIocm9vdCk7CiAgICAgLy9jb3V0PDxlbmRsOwogICAgTm9kZSAqdHJlZV9tYWRlID0gZGVTZXJpYWxpemUoQSk7CiAgIAogICAgaW5vcmRlcih0cmVlX21hZGUpOwogICAgY291dDw8ZW5kbDsKICAKICB9CiAgcmV0dXJuIDA7Cn0K