using
System;
using
System.Collections.Generic;
public
class
Node
{
public
int
data;
public
Node left, right;
public
Node(
int
item)
{
data = item;
left = right =
null
;
}
}
public
class
GFG{
Node root;
static
int
maxHeightToLeafUTIL(
Node curr, Dictionary<
int
, List<
int
> > mp)
{
if
(curr ==
null
)
{
return
0;
}
int
leftLeaf
= maxHeightToLeafUTIL(curr.left, mp);
int
rightLeaf
= maxHeightToLeafUTIL(curr.right, mp);
int
maxHeightSubtree
= 1 + Math.Max(leftLeaf, rightLeaf);
if
(!mp.ContainsKey(maxHeightSubtree))
{
mp.Add(maxHeightSubtree,
new
List<
int
>());
}
mp[maxHeightSubtree].Add(curr.data);
return
maxHeightSubtree;
}
static
void
printAndDelete(Node root)
{
Dictionary<
int
, List<
int
> > mp=
new
Dictionary<
int
, List<
int
> >();
maxHeightToLeafUTIL(root, mp);
foreach
(KeyValuePair<
int
, List<
int
>> k
in
mp)
{
Console.Write(k.Value.Count +
" "
);
}
}
static
public
void
Main (){
GFG tree =
new
GFG();
tree.root =
new
Node(2);
tree.root.left =
new
Node(5);
tree.root.right =
new
Node(7);
tree.root.right.right =
new
Node(6);
tree.root.left.left =
new
Node(1);
tree.root.left.right =
new
Node(8);
tree.root.left.right.left =
new
Node(3);
tree.root.left.right.right =
new
Node(4);
printAndDelete(tree.root);
}
}