使用递归聚合总计 - 仅适用于一个父子级别

Aggregating totals using recursion - works one parent-child level only

我有一个树视图控件,其中包含附加到每个节点的对象列表。选择节点后,我想知道所选节点及其所有子节点的对象总数。

递归函数按预期遍历树,但我没有正确聚合总和。它只添加当前节点和下一级子节点的值。

我确定我的代码中的最后一行不正确 (return n.Maps.Count),但我不知道如果层次结构比一层更深,如何聚合这些值。

感谢任何帮助。问候克里斯

private void CallingFunction()
{
    .... <some unrelated code> ...

    foreach (GeoSchemeTreeNode n in node.Nodes)
    {
        xx += AddTotal(n);
    }

    Console.WriteLine($"total={xx});
}

private int AddTotal(GeoSchemeTreeNode n)
{
    foreach (GeoSchemeTreeNode i in n.Nodes)
    {
        AddTotal(i);
    }

    return n.Maps.Count;
}

您的问题似乎是您实际上并没有存储和计算递归的乘积。

固定方法应如下所示:

private int AddTotal(GeoSchemeTreeNode n)
{
    int total = n.Maps.Count;

    foreach (GeoSchemeTreeNode i in n.Nodes)
    {
        total += AddTotal(i);
    }

    return total;
}