代码之家  ›  专栏  ›  技术社区  ›  NTP

查找子节点中所有计数属性的总和

  •  0
  • NTP  · 技术社区  · 6 年前

    我有下面的TreeJSON课程。

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

    我试图通过添加所有子节点的count属性来设置父节点的sum属性 到父级的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 回复  |  直到 6 年前
        1
  •  1
  •   Dmitrii Bychenko    6 年前

    您可以尝试实现广度优先搜索

     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;
     }
    
        2
  •  1
  •   Paulo Morgado    6 年前

    既然问题被标记了 linq :

    public static int FindSum(TreeJSON node) => node.count + node.children.Sum(n => FindSum(n));