Здравствуйте, cvetkov, Вы писали:
C>но у Node3, Node2 и Node0 есть дети
Да, точно. Извиняюсь.
Node
---Node0 = ?
-----Sub01 : val = 32
-----Sub02 : val = 12
-----Sub03 : val = 42
---Node1 = ?
-----Sub11 : val = 12
-----Sub12 : val = 93
-----Sub13 : val = 21
-----Node10 : ?
--------Sub100 : val = 11
--------Sub101 : val = 10
для node посчитать сумму Sub
примерно вот таким образом удалось посчитать суммы нодов
т.е.
Node
---Node1
------Sub10
---Node2
------Sub20
------Node21
---------Sub211
---------Sub212
но решение судя по всему кривое
class Node
{
float Summa;
List<Node> Nodes;
}
void Build() //-------------
{
int depth = 0;
float total_sum = 0;
float sum_per_node = 0;
foreach(Node n in rootNodes)
{
Build(ref node, ref total_sum, ref sum_per_node, ref depth);
// Out(total_sum for node n)
}
}
void Build(ref Node node, ref float sum, ref sum_per_node, ref nest_depth)
{
++nest_depth;
foreach(Node n in node.Children)
{
if(n.Children.Count > 0)
Build(ref n, ref sum, ref sum_per_node, ref nest_depth);
else
{
sum_per_node += n.Summa;
}
}
if(nest_depth >= 2)
{
//SetNodeSumma(node, sum_per_node)
}
else if(nest_depth == 1)
{
sum += sum_per_node;
sum += node.Summa;
}
sum_per_node := 0;
--nest_depth;
}
зы Код абстрактный