#include <bits/stdc++.h>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution
{
private:
public:
Solution();
int mirror_image(struct TreeNode *A, int query);
};
vector<int> cp(struct TreeNode *A)
{
vector<int > vp;
int iter (0);
if(A != NULL)
{
vp.push_back(A->val);
cp(A->left);
cp(A->right);
}
return vp;
}
Solution::Solution(){}
int Solution::mirror_image(struct TreeNode *A, int query)
{
vector<int> store = cp(A);
queue<struct TreeNode *> q;
q.push(A);
while(!q.empty())
{
struct TreeNode * node = q.front();
q.pop();
if(node->left == NULL && node->right == NULL)
{
continue;
}
if(node->left != NULL && node->right != NULL)
{
TreeNode *temp = node->left;
node->left = node->right;
node->right = temp;
q.push(node->left);
q.push(node->right);
}
else if(node->left == NULL)
{
node->left = node->right;
node->right = NULL;
q.push(node->left);
}
else
{
node->right = node->left;
node->right = NULL;
q.push(node->left);
}
}
vector<int> mirror = cp(A);
int iter (0);
for(iter = 0; iter < store.size(); iter++)
{
if(store[iter] == query)
{
break;
}
}
if(mirror[iter] > 0)
{
return mirror[iter];
}else
{
return -1;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
Solution sol;
int queries = 8;
TreeNode *a = new TreeNode(1);
a->left = new TreeNode(3);
a->right = new TreeNode(2);
a->left->left = new TreeNode(7);
a->left->right = new TreeNode(6);
a->right->left = new TreeNode(5);
a->right->right = new TreeNode(4);
a->left->left->right = new TreeNode(10);
a->right->left->left = new TreeNode(9);
a->right->left->right = new TreeNode(8);
for(int iter = 0; iter < queries; iter++)
{
int query;
cin >> query;
int ans = sol.mirror_image(a, query);
cout << ans << endl;
}
return 0;
}