2009-07-23 74 views
2

什麼是三級樹狀數據結構的最優化(易於維護,相當快速,健壯)的實現? 我想使用Dictionary或SortedDictionary,因爲所有值(節點)都有唯一的鍵。什麼是C#中固定深度樹狀數據的最佳數據結構?

第一級應該有大約300個項目,其中每個零級到幾十個(幾乎不超過100個,通常少於10個)第二級和第三級大約10個。二級和三級緊密相連,所以它們應該可能由一個對象來表示。所有的關係是1:N

++-L1 
|++-L2 
||+--L3 
||+--...1 to 10 L3 items for each L2 
||+--L3 
|+--L2 
|+--...0 to 100, usually <10 L2 items for each L1 
|+--L2 
+--L1 
+--L1 
+--...about 300 L1 items 
+--L1 

是更好地創建包含level2的對象(一個真正的樹)或者是它更好地把所有二級對象到一個目錄中每1級對象字典?

對象不是很大,它們只包含一些字符串和數字。該應用程序應該是獨立的(不需要任何SQL服務器左右)

或者是對象表示是一個錯誤的選擇,我應該去完全不同的東西?

+0

您是否期望在樹上進行搜索? – 2009-07-23 15:54:53

+0

不是真正的搜索,但我打算添加一些過濾(從數據結構的角度來看可能是相同的... – Lukas 2009-07-23 17:04:34

回答

3

爲什麼不只是創建一個TreeNode類?

class TreeNode 
{ 
    private string _name; 
    private int _someNumber; 
    private int _uniqueId; 
    private List<TreeNode> _childNodes; 

    public string Name{get{return _name;}} 
    public int SomeNumber{get{return _someNumber;}} 
    public int UniqueId{get{return _uniqueId;}} 
    public List<TreeNode> ChildNodes{get{return _childNodes;}} 

    public void TreeNode(string name, int someNumber, int uniqueId) 
    { 
    _name=name; 
    _someNumber=someNumber; 
    _uniqueId = uniqueId; 
    _childNodes = new List<TreeNode>(); 
    } 

    public void AddNode(TreeNode node) 
    { 
    _childNodes.Add(node); 
    } 

    // other code for deleting, searching, etc. 
} 
1

根據您的樹的動態,一個選項,可以相對簡單和高效(儘管你可能更喜歡非常簡單和相對有效)將是數組的數組的數組(不是一個單一的3D陣列)。如果每個節點的子節點數量變化很大,那麼這會很糟糕......不斷分配新的子數組。但是,如果您只計算一次每個節點的子節點,然後再訪問它們,則陣列數組的陣列可以非常簡單,簡單,緊湊且快速。

相關問題