2009-09-02 64 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);