public TreeNode(int val, TreeNode left = null, TreeNode right = null)
public static double MaxAverage;
public static double GetMaxAverageSubtree(TreeNode root)
public static int[] DFS(TreeNode node)
return new int[] { 0, 0 };
int[] left = DFS(node.left);
int[] right = DFS(node.right);
int num = 1 + left[0] + right[0];
int sum = node.val + left[1] + right[1];
MaxAverage = Math.Max(MaxAverage, (double)sum / (double)num);
return new int[] { num, sum };
public static void Main()
Console.WriteLine("UniLecs");
var root = new TreeNode(5);
root.left = new TreeNode(6);
root.right = new TreeNode(1);
Console.WriteLine(GetMaxAverageSubtree(root));