import
java.util.ArrayList;
import
java.util.List;
class
Node {
int
data;
Node left, right;
Node(
int
data) {
this
.data = data;
left = right =
null
;
}
}
public
class
Main {
static
Node insert(Node root,
int
data) {
if
(root ==
null
)
return
new
Node(data);
else
if
(data < root.data)
root.left = insert(root.left, data);
else
root.right = insert(root.right, data);
return
root;
}
static
void
inorder(List<Node> v, Node root) {
if
(root ==
null
) {
return
;
}
inorder(v, root.left);
v.add(root);
inorder(v, root.right);
}
static
int
median(Node node,
int
k) {
List<Node> v =
new
ArrayList<>();
inorder(v, node);
List<Node> v1 =
new
ArrayList<>();
inorder(v1, v.get(k -
1
));
if
(v1.size() %
2
==
0
) {
int
mid = v1.size() /
2
;
return
(v1.get(mid).data + v1.get(mid -
1
).data) /
2
;
}
return
v1.get(v1.size() /
2
).data;
}
public
static
void
main(String[] args) {
Node root =
null
;
int
n =
4
;
int
k =
2
;
int
[] nodes = {
3
,
2
,
4
,
1
};
for
(
int
i =
0
; i < n; i++) {
int
x = nodes[i];
root = insert(root, x);
}
System.out.println(median(root, k));
}
}