2009-09-02 27 views
2

實現非二叉樹及其相關操作的最佳.NET庫(商業或開源)是什麼?要求是動態插入和刪除節點,複製/粘貼節點,查找埋入節點中的信息,將文件夾及其子項從樹的一個區域複製/粘貼到另一個區域。樹在業務邏輯層。表示層是WPF。實現語言是C#。樹的最佳.NET庫

+0

而你所說的 '最佳' 是什麼意思?最快的尋找時間?最小的內存佔用?容易查詢? – Pondidum 2009-09-02 10:57:24

+0

速度快,學習曲線穩定。 – 2009-09-02 11:49:47

+0

還有一件事:樹將從XML或SQLSERVER填充 – 2009-09-02 11:51:18

回答

2

樹很容易編寫,具體要求也相對多樣化,我不確定「樹庫」會非常有用。你爲什麼不寫自己的?

3

你可能想看看codeplex上的QuickGraph。

4

毫無疑問,我會說LINQ to XML

XDocument doc = new XDocument(
    new XDeclaration("1.0", "utf-8", "true"), 
    new XComment("Comment"), 
    new XElement("Employees", 
     new XElement("RootElement", 
      new XElement("Employee", 
       new XAttribute("id", "123"), 
       new XElement("name", "John"), 
       new XCData("CData"))))); 

// Selection multiple nodes 
var allEmployees = xdoc.Root.Elements("Employees"); 
// Select single node 
var employeeJohn = from node in xdoc.Root.Descendants().Elements("Employees").Elements("Employee") 
        where node.Attribute("id").Value == "123" 
        select node; 

// Insert node 
XElement newNode = new XElement("NewNode", "Node content"); 
allEmployees.Add(newNode); 

// Delete node 
employeeJohn.Remove(); 
+0

您應該添加一個如何在某些現有樹上動態插入和移除節點的示例。 – 2009-09-03 10:09:06

4

我會用:

class MyTreeNode : List<MyTreeNode> 
{ 
    // declare per-node properties here, e.g. 
    public string Name { get; set; } 
} 

建築及重新排列樹是非常簡單的:

MyTreeNode root = new MyTreeNode {Name = "root"}; 

MyTreeNode firstChild = new MyTreeNode {Name = "1"}; 
root.Add(firstChild); 

MyTreeNode secondChild = new MyTreeNode { Name = "2" }; 
root.Add(secondChild); 

root.Remove(firstChild); 
secondChild.Add(firstChild);