2013-02-11 145 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

相關問題