节点1 权重(xx%)
  节点1-1 权重(xx%)
     节点1-1-1 权重(xx%)
         节点1-1-1-1 (2.6)  权重(25%) 乘  值(2.6)  = 分数 
         节点1-1-1-2 (2.6)  权重(25%) 乘  值(2.6)  = 分数   
     节点1-1-2  权重(25%) 乘  值(2.6) = 分数
     节点1-1-3  权重(25%) 乘  值(2.6) = 分数
     节点1-1-4  权重(25%) 乘  值(2.6) = 分数
  节点1-2 权重(xx%)
  节点1-3 权重(xx%)
  节点1-4 权重(xx%)
  ....  在上面的节点中, 每一个节点节点都有一个权重, 每一个最后一级节点都会有一个值, 最后一级节点的权重乘以他的值,得到最后一级的分数,最后一级节点的分数累加就是它父级的值,再乘以父级的权重就是父级的分数,以此类推,最后算出 节点1 的分数。现在的问题是节点列表没有规律,有的节点的子节点是最后一级,有的节点下的子节点中还有子节点,例如:要算出节点(节点1-1)的分数, 要把(节点1-1-1 到 节点1-1-4)的分数累加起来, 节点1-1-2 到 4 可直接取得它们的分数, 但是要算出节点1-1-1 的分数,就得用它的权重乘以 节点1-1-1-1 和 1-1-1-2 累加的结果...求代码实现        public void TreeBind(TreeNodeCollection tc)
        {
            for (int i = 0; i < tc.Count; i++)
            {
                //不是最后一级
                if (tc[i].Nodes.Count > 0)
                {
                    //调用自身
                    TreeBind(tc[i].Nodes);
                }
                else //最后一级
                  {                 }
                
            }
        }
递归的问题

解决方案 »

  1.   

    public double TreenodeValue(TreeNode node)
    {
        var p = Get权重(node);
        if (node.Nodes == null || node.Nodes.Count == 0)
            return Get分数(node) * p;    double sum = 0;
        foreach (var child in node.Nodes)
            sum += TreenodeValue(child);
        return sum * p;
    }
      

  2.   

    不是一看到树就要去套用 TreeBind 代码的。程序员要学会程序设计,而不是死记硬背。