using
System;
using
System.Collections.Generic;
class
GFG
{
class
Node
{
public
int
data;
public
Node left, right;
}
static
Node getNode(
int
data)
{
Node newNode =
new
Node();
newNode.data = data;
newNode.left = newNode.right =
null
;
return
newNode;
}
static
void
storePath(Node root,
Dictionary<
int
,
int
> mp,
int
XOR)
{
if
(root ==
null
)
return
;
mp.Add(root.data, XOR ^ root.data);
XOR ^= root.data;
if
(root.left !=
null
)
storePath(root.left, mp, XOR);
if
(root.right !=
null
)
storePath(root.right, mp, XOR);
}
static
int
findXORPath(Dictionary<
int
,
int
> mp,
int
node1,
int
node2)
{
return
mp[node1] ^ mp[node2];
}
public
static
void
Main()
{
Node root = getNode(0);
root.left = getNode(1);
root.left.left = getNode(3);
root.left.left.left = getNode(7);
root.left.right = getNode(4);
root.left.right.left = getNode(8);
root.left.right.right = getNode(9);
root.right = getNode(2);
root.right.left = getNode(5);
root.right.right = getNode(6);
int
XOR = 0;
Dictionary<
int
,
int
> mp =
new
Dictionary<
int
,
int
>();
int
node1 = 3;
int
node2 = 5;
storePath(root, mp, XOR);
Console.WriteLine( findXORPath(mp, node1, node2));
}
}