From 227124b3278b74b10c36436a36b9a719dc705414 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Fri, 2 Sep 2022 21:11:03 +0200 Subject: [PATCH] =?UTF-8?q?problems(cs):=20add=20=E2=80=9E637.=20Average?= =?UTF-8?q?=20of=20Levels=20in=20Binary=20Tree=E2=80=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko diff --git a/problems/average-of-levels-in-binary-tree.cs b/problems/average-of-levels-in-binary-tree.cs new file mode 100644 index 0000000..f2ba5aa --- /dev/null +++ b/problems/average-of-levels-in-binary-tree.cs @@ -0,0 +1,72 @@ +public class TreeNode +{ + public int val; + public TreeNode? left; + public TreeNode? right; + public TreeNode(int val = 0, TreeNode? left = null, TreeNode? right = null) + { + this.val = val; + this.left = left; + this.right = right; + } +} + + +public class Solution +{ + private class Level + { + long sum; + int counter; + + public Level() + { + sum = 0; + counter = 0; + } + + public void Add(int x) + { + sum += x; + counter++; + } + + public double Average + { + get => sum / (double)counter; + } + } + + private List AverageOfLevels(List averages, TreeNode? node, int level) + { + if (node == null) + { + return averages; + } + + if (level == averages.Count) + { + averages.Add(new Level()); + } + averages[level].Add(node.val); + + AverageOfLevels(averages, node.left, level + 1); + AverageOfLevels(averages, node.right, level + 1); + + return averages; + } + + public IList AverageOfLevels(TreeNode? root) + => AverageOfLevels(new List(), root, 0).Select(level => level.Average).ToList(); + + public static void Main() + { + var s = new Solution(); + + foreach (var a in s.AverageOfLevels(new TreeNode(3, new TreeNode(9), new TreeNode(20, new TreeNode(15), new TreeNode(7))))) + { + Console.Write($"{a} "); + } + Console.WriteLine(); + } +} --- problems/average-of-levels-in-binary-tree.cs | 72 ++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 problems/average-of-levels-in-binary-tree.cs diff --git a/problems/average-of-levels-in-binary-tree.cs b/problems/average-of-levels-in-binary-tree.cs new file mode 100644 index 0000000..f2ba5aa --- /dev/null +++ b/problems/average-of-levels-in-binary-tree.cs @@ -0,0 +1,72 @@ +public class TreeNode +{ + public int val; + public TreeNode? left; + public TreeNode? right; + public TreeNode(int val = 0, TreeNode? left = null, TreeNode? right = null) + { + this.val = val; + this.left = left; + this.right = right; + } +} + + +public class Solution +{ + private class Level + { + long sum; + int counter; + + public Level() + { + sum = 0; + counter = 0; + } + + public void Add(int x) + { + sum += x; + counter++; + } + + public double Average + { + get => sum / (double)counter; + } + } + + private List AverageOfLevels(List averages, TreeNode? node, int level) + { + if (node == null) + { + return averages; + } + + if (level == averages.Count) + { + averages.Add(new Level()); + } + averages[level].Add(node.val); + + AverageOfLevels(averages, node.left, level + 1); + AverageOfLevels(averages, node.right, level + 1); + + return averages; + } + + public IList AverageOfLevels(TreeNode? root) + => AverageOfLevels(new List(), root, 0).Select(level => level.Average).ToList(); + + public static void Main() + { + var s = new Solution(); + + foreach (var a in s.AverageOfLevels(new TreeNode(3, new TreeNode(9), new TreeNode(20, new TreeNode(15), new TreeNode(7))))) + { + Console.Write($"{a} "); + } + Console.WriteLine(); + } +}