import
java.util.*;
class
GFG
{
static
int
N =
9
;
static
void
dfs(
int
node,
int
parent,
int
height[],
int
vis[],
Vector<Integer> tree[])
{
height[node] =
1
+ height[parent];
vis[node] =
1
;
for
(
int
it : tree[node])
{
if
(vis[it] !=
1
)
{
dfs(it, node, height, vis, tree);
}
}
}
static
void
insertEdges(
int
x,
int
y, Vector<Integer> tree[])
{
tree[x].add(y);
tree[y].add(x);
}
static
void
printLevelswithMaximumNodes(
int
N,
int
vis[],
int
height[])
{
int
[]mark =
new
int
[N +
1
];
int
maxLevel =
0
;
for
(
int
i =
1
; i <= N; i++) {
if
(vis[i] ==
1
)
mark[height[i]]++;
maxLevel = Math.max(height[i], maxLevel);
}
int
maxi =
0
;
for
(
int
i =
1
; i <= maxLevel; i++)
{
maxi = Math.max(mark[i], maxi);
}
System.out.print(
"The levels with maximum number of nodes are: "
);
for
(
int
i =
1
; i <= maxLevel; i++)
{
if
(mark[i] == maxi)
System.out.print(i+
" "
);
}
}
public
static
void
main(String[] args)
{
Vector<Integer> []tree =
new
Vector[N +
1
];
for
(
int
i=
0
; i < N +
1
; i++)
tree[i] =
new
Vector<Integer>();
insertEdges(
1
,
2
, tree);
insertEdges(
1
,
3
, tree);
insertEdges(
2
,
4
, tree);
insertEdges(
2
,
5
, tree);
insertEdges(
5
,
7
, tree);
insertEdges(
5
,
8
, tree);
insertEdges(
3
,
6
, tree);
insertEdges(
6
,
9
, tree);
int
height[] =
new
int
[N +
1
];
int
vis[] =
new
int
[N +
1
];
height[
0
] =
0
;
dfs(
1
,
0
, height, vis, tree);
printLevelswithMaximumNodes(N, vis, height);
}
}