#include <bits/stdc++.h>
using
namespace
std;
class
Node
{
public
:
int
data;
Node *left, *right;
Node(
int
data)
{
this
->data = data;
this
->left = NULL;
this
->right = NULL;
}
};
void
updateParent(
int
*parent, Node *node)
{
if
(node == NULL)
return
;
if
(node->left != NULL)
parent[node->left->data] = node->data;
if
(node->right != NULL)
parent[node->right->data] = node->data;
updateParent(parent, node->left);
updateParent(parent, node->right);
}
int
getMaxXor(Node *root,
int
n,
int
val,
int
x)
{
int
*parent =
new
int
[n + 1];
updateParent(parent, root);
int
maximum = x ^ val;
val = parent[val];
while
(val != 0)
{
maximum = max(maximum, x ^ val);
val = parent[val];
}
return
maximum;
}
int
main()
{
int
n = 6;
Node *root;
root =
new
Node(1);
root->left =
new
Node(2);
root->right =
new
Node(3);
root->left->left =
new
Node(4);
root->right->right =
new
Node(5);
root->right->right->left =
new
Node(6);
int
val = 6, x = 4;
cout << getMaxXor(root, n, val, x) << endl;
return
0;
}