2013-02-11 148 views
0

我已经为Web应用程序创建了一个动态树。我的树形结构如下所示:父节点包含所有子节点数据的总和

id  name  pid  data1  data2 

1  Item1 0 

2  Item2 1  70  45 

3  Item3 0 

4  Item3 1  56  48 

3  Item3 3  34  48 
........ 

父节点不包含data1和data2的任何值。我创建了树的递归列表。但现在我需要做的是将所有子节点的data1和data2的值显示为父节点中的data1和data2的值。

树是多层次的。我怎样才能向每个父母添加其子节点的值?我使用C#顺便说一句。感谢

更新:

public class MyTree 
{ 
    public MyTree() 
    { 
     children = new List<MyTree>(); 
    } 
    public int id { get; set; } 
    public string data { get; set; } 
    public int pid { get; set; } 
    public decimal? data1 { get; set; } 
    public decimal? data2 { get; set; }    
    public IList<MyTree> children { get; set; } 
} 
+0

你可以发布你正在使用的Node类吗?答案将涉及使用此递归遍历树。 – 2013-02-11 11:09:49

+0

@MatthewWatson:请参阅节点类 – 2013-02-11 11:57:08

回答

1

,如果它被设置在下面的成员变量/更新的属性对会给出一个明确的值,或所有儿童的价值观的递归之和,如果它没有:

private decimal? _data1; 
public decimal? data1 
{ 
    get 
    { 
     if (_data1.HasValue) 
      return _data1; 
     // This needs System.Linq but can be done manually. 
     return children.Sum(c => c.data1); 
    } 
    set { _data1 = value; } 
} 

(同样为data2。)

它不会从一个元素与儿童明确设置的值阻止你。

+0

的更新部分我正在使用递归函数来设置节点中的值。所以它将所有父母的值设为0。同样,上面的代码似乎将儿童的值设置为其父项。它是否可以将儿童的子女(如果有的话)等等设置到根或每个更高的父母身上? – 2013-02-12 04:11:12

+0

对不起,我最后的评论。您的解决方案很好。 Thankx。在接受你的答案之前,让我再做一些测试。 – 2013-02-12 04:14:14

相关问题