使用递归聚合总计 - 仅适用于一个父子级别
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;
}
我有一个树视图控件,其中包含附加到每个节点的对象列表。选择节点后,我想知道所选节点及其所有子节点的对象总数。
递归函数按预期遍历树,但我没有正确聚合总和。它只添加当前节点和下一级子节点的值。
我确定我的代码中的最后一行不正确 (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;
}