Найдите сумму всех свойств count в дочерних узлах - PullRequest
0 голосов
/ 06 августа 2020

У меня есть следующий класс Tree JSON.

public class TreeJSON
{
    public string name;
    public int count;
    public int level;
    public int sum;
    public List<TreeJSON> children;
}

Я пытаюсь установить свойство sum родительских узлов, добавляя свойство count всех потомков к свойству count родительского узла. Я попытался использовать следующую рекурсивную функцию, но не получил правильных значений суммы.

    public static void FindSum(TreeJSON data)
    {
        if (data.children == null)
            return;

        foreach (var item in data.children)
        {
            FindSum(item);
        }

        foreach (var item in data.children)
        {
            data.sum = data.sum + item.count;
        }

        data.sum = data.sum + data.count;
    } 

Я был бы очень признателен, если бы кто-нибудь мог указать мне правильное направление.

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Поскольку вопрос помечен как linq:

public static int FindSum(TreeJSON node) => node.count + node.children.Sum(n => FindSum(n));
1 голос
/ 06 августа 2020

Вы можете попробовать реализовать поиск в ширину

 public static int FindSum(TreeJSON node) {
   if (null == node)
     return 0; // Or throw ArgumentNullException(nameof(node)); 

   int result = node.count; // or 0 if node itself should be excluded

   if (null == node.children)
     return result; 

   Queue<TreeJSON> agenda = new Queue<TreeJSON>(node.children);  

   while (agenda.Count > 0) {
     TreeJSON item = agenda.Dequeue();

     result += item.count; 

     if (item.children != null)
       foreach (var child in item.children)
         agenda.Enqueue(child);
   }

   return result;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...