import
java.util.*;
class
GFG
{
static
class
Node
{
int
data;
Node left;
Node right;
public
Node(
int
data)
{
this
.data = data;
this
.left =
null
;
this
.right =
null
;
}
};
static
void
dfs(Node root,
int
type, Vector<Integer> left_leaf,
Vector<Integer> right_leaf)
{
if
(root ==
null
)
{
return
;
}
if
(root.left ==
null
&& root.right ==
null
)
{
if
(type == -
1
)
{
System.out.print(
"Tree consists of a single node\n"
);
}
else
if
(type ==
0
)
{
left_leaf.add(root.data);
}
else
{
right_leaf.add(root.data);
}
return
;
}
if
(root.left !=
null
)
{
dfs(root.left,
0
, left_leaf, right_leaf);
}
if
(root.right !=
null
)
{
dfs(root.right,
1
, left_leaf, right_leaf);
}
}
static
void
print(Vector<Integer> left_leaf,
Vector<Integer> right_leaf)
{
if
(left_leaf.size() ==
0
&& right_leaf.size() ==
0
)
return
;
System.out.print(
"Left leaf nodes\n"
);
for
(
int
x : left_leaf)
{
System.out.print(x +
" "
);
}
System.out.println();
System.out.print(
"Right leaf nodes\n"
);
for
(
int
x : right_leaf)
{
System.out.print(x +
" "
);
}
System.out.println();
}
public
static
void
main(String[] args)
{
Node root =
new
Node(
0
);
root.left =
new
Node(
1
);
root.right =
new
Node(
2
);
root.left.left =
new
Node(
3
);
root.left.right =
new
Node(
4
);
Vector<Integer> left_leaf =
new
Vector<Integer>(),
right_leaf =
new
Vector<Integer>();
dfs(root, -
1
, left_leaf, right_leaf);
print(left_leaf, right_leaf);
}
}