import
java.util.*;
class
GFG{
static
class
Node
{
int
data;
Node left;
Node right;
Node(
int
val)
{
data = val;
left = right =
null
;
}
};
static
int
cntMaxEvenNodes(Node root)
{
if
(root ==
null
)
{
return
0
;
}
int
cntEven =
0
;
if
(root.data %
2
==
0
)
{
cntEven +=
1
;
}
int
X = cntMaxEvenNodes(root.left);
int
Y = cntMaxEvenNodes(root.right);
cntEven += Math.max(X, Y);
return
cntEven;
}
static
void
printPath(Node root,
int
cntEven,
int
cntMaxEven,
Vector<Integer> path)
{
if
(root ==
null
)
{
return
;
}
if
(root.data %
2
==
0
)
{
path.add(root.data);
cntEven +=
1
;
}
if
(root.left ==
null
&&
root.right ==
null
)
{
if
(cntEven == cntMaxEven)
{
int
N = path.size();
for
(
int
i =
0
; i < N -
1
; i++)
{
System.out.print(path.get(i) +
" -> "
);
}
System.out.print(path.get(N -
1
) +
"\n"
);
}
}
printPath(root.left, cntEven,
cntMaxEven, path);
printPath(root.right, cntEven,
cntMaxEven, path);
if
(root.data %
2
==
0
)
{
path.remove(path.size() -
1
);
cntEven--;
}
}
static
void
printMaxPath(Node root)
{
int
cntMaxEven;
cntMaxEven = cntMaxEvenNodes(root);
Vector<Integer> path =
new
Vector<>();
printPath(root,
0
, cntMaxEven,
path);
}
public
static
void
main(String[] args)
{
Node root =
null
;
root =
new
Node(
2
);
root.left =
new
Node(
6
);
root.right =
new
Node(
3
);
root.left.left =
new
Node(
4
);
root.left.right =
new
Node(
7
);
root.right.right =
new
Node(
11
);
root.left.left.left =
new
Node(
10
);
root.left.left.right =
new
Node(
12
);
root.left.right.right =
new
Node(
1
);
printMaxPath(root);
}
}