using
System;
using
System.Collections.Generic;
using
System.Globalization;
public
class
TreeNode
{
public
int
val;
public
List<TreeNode> children;
public
TreeNode(
int
v)
{
val = v;
children =
new
List<TreeNode>();
}
}
public
class
GFG
{
static
double
ans = 0.0;
public
static
double
[] MaxAverage( TreeNode root)
{
if
(root.children !=
null
&& root.children.Count == 0)
{
ans = Math.Max(ans, root.val);
return
new
double
[] { root.val, 1 };
}
double
[] childResult =
new
double
[2];
foreach
(TreeNode child
in
root.children)
{
double
[] childTotal
= MaxAverage(child);
childResult[0]
= childResult[0] + childTotal[0];
childResult[1]
= childResult[1] + childTotal[1];
}
double
sum = childResult[0] + root.val;
double
count = childResult[1] + 1;
ans = Math.Max(ans, sum / count);
return
new
double
[] { sum, count };
}
static
public
void
Main ()
{
TreeNode root =
new
TreeNode(20);
TreeNode left =
new
TreeNode(12);
TreeNode right =
new
TreeNode(18);
root.children.Add(left);
root.children.Add(right);
left.children.Add(
new
TreeNode(11));
left.children.Add(
new
TreeNode(3));
right.children.Add(
new
TreeNode(15));
right.children.Add(
new
TreeNode(8));
MaxAverage(root);
NumberFormatInfo setPrecision =
new
NumberFormatInfo();
setPrecision.NumberDecimalDigits = 1;
Console.WriteLine(ans.ToString(
"N"
, setPrecision));
}
}