import
java.util.*;
public
class
Main
{
static
class
Node {
public
int
data;
public
Node left, right;
public
Node(
int
data)
{
this
.data = data;
left = right =
null
;
}
}
static
Vector<Integer> reverseTreePathUtil(Node root,
int
data, Vector<Integer> q1)
{
Vector<Integer> emptyQueue =
new
Vector<Integer>();
if
(root ==
null
)
return
emptyQueue;
if
(root.data == data) {
q1.add(root.data);
root.data = q1.get(
0
);
q1.remove(
0
);
return
q1;
}
q1.add(root.data);
Vector<Integer> left = reverseTreePathUtil(root.left, data, q1);
Vector<Integer> right = reverseTreePathUtil(root.right, data, q1);
if
(right.size() >
0
) {
root.data = right.get(
0
);
right.remove(
0
);
return
right;
}
if
(left.size() >
0
) {
root.data = left.get(
0
);
left.remove(
0
);
return
left;
}
return
emptyQueue;
}
static
void
reverseTreePath(Node root,
int
data)
{
Vector<Integer> q1 =
new
Vector<Integer>();
reverseTreePathUtil(root, data, q1);
}
static
void
inorder(Node root)
{
if
(root !=
null
) {
inorder(root.left);
System.out.print(root.data +
" "
);
inorder(root.right);
}
}
static
Node newNode(
int
data)
{
Node temp =
new
Node(data);
return
temp;
}
public
static
void
main(String[] args)
{
Node root = newNode(
7
);
root.left = newNode(
6
);
root.right = newNode(
5
);
root.left.left = newNode(
4
);
root.left.right = newNode(
3
);
root.right.left = newNode(
2
);
root.right.right = newNode(
1
);
int
data =
4
;
reverseTreePath(root, data);
inorder(root);
}
}