using System.Collections.Generic;
private static int maxFreq;
private static Dictionary<int, int> dict;
public static void Main()
tree.root.left = new Node(2);
tree.root.right = new Node(-5);
tree1.root = new Node(5);
tree1.root.left = new Node(2);
tree1.root.right = new Node(-3);
var freqSub = Program.GetMostFrequentSubtreeSum(tree.root);
foreach (var val in freqSub) {
var freqSub1 = Program.GetMostFrequentSubtreeSum(tree1.root);
foreach (var val in freqSub1) {
public static List<int> GetMostFrequentSubtreeSum(Node root) {
dict = new Dictionary<int, int>();
var keyList = new List<int>(dict.Keys);
var resultList = new List<int>();
foreach (int key in keyList) {
if (maxFreq == dict[key]) {
public static int IterateTree(Node node, Dictionary<int, int> dict) {
if (node == null) return 0;
var sum = IterateTree(node.left, dict) + IterateTree(node.right, dict) + node.value;
var curFreq = dict.ContainsKey(sum) ? dict[sum] : 0;