import
java.util.*;
public
class
Main {
static
class
Node {
int
key_ele;
ArrayList <Node> child;
Node(
int
data_value)
{
key_ele = data_value;
child =
new
ArrayList <Node> ();
}
}
static
int
numberOfChild(Node root,
int
ele)
{
int
num =
0
;
if
(root ==
null
) {
return
0
;
}
Queue <Node> q =
new
LinkedList <> ();
q.add(root);
while
(!q.isEmpty()) {
int
n = q.size();
while
(n >
0
) {
Node nn = q.peek();
q.remove();
if
(nn.key_ele == ele) {
num = num + nn.child.size();
return
num;
}
for
(
int
i =
0
;
i < nn.child.size(); i++) {
q.add(nn.child.get(i));
}
n--;
}
}
return
num;
}
static
void
printTree(Node root,
int
[] vec)
{
HashMap <Integer, ArrayList <Integer> > mp
=
new
HashMap <Integer,ArrayList <Integer>> ();
int
i =
0
;
for
(i =
0
; i < vec.length; i++) {
int
temp;
temp = numberOfChild(root, vec[i]);
if
(mp.containsKey(temp)){
mp.get(temp).add(vec[i]);
}
else
{
mp.put(temp,
new
ArrayList <Integer> ());
mp.get(temp).add(vec[i]);
}
}
for
(Map.Entry <Integer, ArrayList<Integer> > value : mp.entrySet()) {
System.out.print(value.getKey() +
" child: "
);
ArrayList <Integer> list = value.getValue();
int
len = list.size();
for
(i=
0
; i < len; i++) {
if
(i < len -
1
) {
System.out.print(list.get(i) +
", "
);
}
else
{
System.out.print(list.get(i));
}
}
System.out.print(
"\n"
);
}
}
public
static
void
main(String args[]) {
int
[] vec = {
1
,
2
,
3
,
4
,
5
,
6
,
7
};
HashMap <Integer, ArrayList <Integer> > mp;
ArrayList <Integer> v;
Node root =
new
Node(
1
);
(root.child).add(
new
Node(
2
));
(root.child).add(
new
Node(
3
));
(root.child).add(
new
Node(
4
));
(root.child.get(
0
).child).add(
new
Node(
5
));
(root.child.get(
0
).child).add(
new
Node(
6
));
(root.child.get(
2
).child).add(
new
Node(
7
));
printTree(root, vec);
}
}