为了账号安全,请及时绑定邮箱和手机立即绑定

C#中的树数据结构

C#中的树数据结构

慕的地8271018 2019-08-09 11:02:13
C#中的树数据结构我在C#中寻找树或图形数据结构,但我想没有提供。对数据结构的广泛检查使用C#2.0解释了一些原因。是否有一个方便的库,通常用于提供此功能?也许通过策略模式来解决文章中提出的问题。我觉得实现自己的树有点傻,就像我实现自己的ArrayList一样。我只想要一个可以不平衡的通用树。想一下目录树。C5看起来很漂亮,但它们的树结构似乎被实现为更适合搜索的平衡红黑树,而不是表示节点的层次结构。
查看完整描述

3 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

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

您需要实现的基本结构将是一组节点,这里有一些选项可以帮助您入门。我们假设类Node是整个解决方案的基类。

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

如果需要向上导航树,则Node类需要指向其父节点的链接。

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


查看完整回答
反对 回复 2019-08-09
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

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?


查看完整回答
反对 回复 2019-08-09
  • 3 回答
  • 0 关注
  • 534 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信