Re[2]: Помогите составить алгоритм(деревья)
От: openair  
Дата: 10.06.09 12:50
Оценка:
Здравствуйте, 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;
}

зы Код абстрактный
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.