存储树结构的集合是啥?

Posted

技术标签:

【中文标题】存储树结构的集合是啥?【英文标题】:What collection to store a tree structure?存储树结构的集合是什么? 【发布时间】:2012-08-08 15:40:44 【问题描述】:

我想将组织结构图存储在集合中。我认为树数据结构最适合我的需求,因为我需要将多个节点添加到一个节点。

LinkedList 仅提供将一个节点添加到另一个节点,如果我理解正确的话。

我查看了 C5 treeset 集合,但似乎没有 Add() 方法可以将超过 2 个节点添加到一个节点。

我还查看了 Windows 窗体库中的 Treeview 类,但我不想将 Windows 窗体 dll 添加到我的项目中,因为我正在构建一个服务层应用程序。 (或者还好吗?)

我不想编写自己的树集合类,如果第 3 方已经提供了一个?

有什么建议吗?

谢谢

【问题讨论】:

***.com/questions/66893/… 的可能重复项? 谢谢我已经看到那个链接,但我不想创建自己的收藏。肯定有人创建了一个 dll 并通过 Nuget 分发它! 预建树状集合的问题在于普遍接受的接口没有一致。与列表、集合或字典不同,树和图可能具有截然不同的接口,具体取决于实现它们的人以及它们需要使用它们的目的。 C# 使您自己的滚动变得相当容易,这是我绝对建议在您的情况下做的事情。 为什么不自己写呢?编写一个简单的树类大约需要 10 分钟。 【参考方案1】:

这样的事情可以作为一个起点。通过使用泛型,这个可以容纳任何东西的树

class TreeNode<T>

    List<TreeNode<T>> Children = new List<TreeNode<T>>();

    T Item get;set;

    public TreeNode (T item)
    
        Item = item;
    

    public TreeNode<T> AddChild(T item)
    
        TreeNode<T> nodeItem = new TreeNode<T>(item);
        Children.Add(nodeItem);
        return nodeItem;
    

一个包含字符串树的样本

string root = "root";
TreeNode<string> myTreeRoot = new TreeNode<string>(root);
var first = myTreeRoot.AddChild("first child");
var second = myTreeRoot.AddChild("second child");
var grandChild = first.AddChild("first child's child");

【讨论】:

以上是关于存储树结构的集合是啥?的主要内容,如果未能解决你的问题,请参考以下文章

数据结构树与树的表示二叉树存储结构及其遍历二叉搜索树平衡二叉树堆哈夫曼树与哈夫曼编码集合及其运算

数据结构—树

Tire树高效统计字符串

数据结构

数据结构树

Trie树(字典树)