递归的问题
节点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 //最后一级
{
}
}
}
递归的问题 --------------------编程问答--------------------
public double TreenodeValue(TreeNode node)--------------------编程问答-------------------- 不是一看到树就要去套用 TreeBind 代码的。程序员要学会程序设计,而不是死记硬背。 --------------------编程问答-------------------- 这样写不行,如果一个节点下有n级节点,返回的值始终是最后一级的 --------------------编程问答-------------------- 第一级要跟据第二级的值来取,第二级要跟据第三级的值来取,第三级跟据第四级来取, 一、二、三级是没有值的,只有最后一级有值 --------------------编程问答-------------------- 假如递归到 节点1-1 要获取它的所有子节点的值和权重分别汇集成两个数组,把这两个数级作为参数,传给“加权和法(子节点权重数组,子节点的值数级)”, 然后这个加权和法经过运算返回一个值,这个值就是 节点1-1 的值,再乘以它的权重就是它的分数。
{
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;
}
换个角度想: 节点1-1-2 到 节点1-1-4 是最后一级节点,可以把它们的各自的权重和值当作是只有一个数的数组传给加权和法计算,得到结果返回给节点1-1, 但是节点1-1-1 要先算出它每个子节点的分数,然后累加乘它的权重,才是节点1-1-1 的分数, 节点1-1-1 的分数加上节点1-1-2到节点1-1-4,就是 节点1-1 的值乘以它的权重=它的分数。
问题是当递归到节点1-1-4 ,就返回到节点1-1了, 节点1-1-1 的分数,应如何处理?
--------------------编程问答-------------------- 2楼说的好!
补充:.NET技术 , C#