C#中的树数据结构

我在C#中查找树或图数据结构,但我想没有提供。 数据结构的广泛考察使用C#2.0解释了一些原因。 有没有一个通常用于提供此功能的便利库? 也许通过战略模式来解决文章中提出的问题。

我感觉有点无聊地实现我自己的树,就像我会实现我自己的ArrayList一样。

我只想要一个可能不平衡的通用树。 想想目录树。 C5看起来很漂亮,但它们的树结构似乎被实现为更适合于搜索的平衡红黑树,而不是代表节点的层次结构。


我最好的建议是没有标准的树型数据结构,因为有很多方法可以实现它,以至于用一种解决方案覆盖所有基础是不可能的。 解决方案越具体,对任何给定问题适用的可能性就越小。 我甚至对LinkedList感到恼火 - 如果我想要一个循环链表?

你需要实现的基本结构将是一个节点的集合,这里有一些选项可以让你开始。 我们假设类Node是整个解决方案的基类。

如果您只需要向下导航树,那么Node类需要一个子列表。

如果你需要在树上导航,那么Node类需要一个链接到它的父节点。

构建一个AddChild方法,该方法负责处理这两点的所有细节以及必须实现的任何其他业务逻辑(儿童限制,儿童排序等)


我讨厌承认它,但我最终使用链表来编写自己的树类。 在一个不相关的笔记中,我刚刚发现了这个圆形的东西,当它附着到我称之为“轴”的东西上时,便于运输货物。


delegate void TreeVisitor<T>(T nodeData);

class NTree<T>
{
    private T data;
    private LinkedList<NTree<T>> children;

    public NTree(T data)
    {
         this.data = data;
        children = new LinkedList<NTree<T>>();
    }

    public void AddChild(T data)
    {
        children.AddFirst(new NTree<T>(data));
    }

    public NTree<T> GetChild(int i)
    {
        foreach (NTree<T> n in children)
            if (--i == 0)
                return n;
        return null;
    }

    public void Traverse(NTree<T> node, TreeVisitor<T> visitor)
    {
        visitor(node.data);
        foreach (NTree<T> kid in node.children)
            Traverse(kid, visitor);
    }
}

简单的递归实现... <40行代码...你只需要在类之外保留对树根的引用,或者将它包装在另一个类中,也许重命名为TreeNode?

链接地址: http://www.djcxy.com/p/26947.html

上一篇: Tree data structure in C#

下一篇: Volatile in C++11