猿问

C#中的树数据结构

C#中的树数据结构

我正在寻找C#中的树或图形数据结构,但我想没有提供一种。使用C#2.0对数据结构的广泛检查解释一下为什么。是否有一个通常用于提供此功能的方便库?也许可以通过一种策略模式来解决本文中提出的问题。

我觉得实现自己的树有点傻,就像我会实现自己的ArrayList一样。

我只想要一棵可能不平衡的通用树。想想目录树。C5看起来很漂亮,但是它们的树结构看起来像平衡的红黑树,比表示节点的层次结构更适合搜索。


慕村225694
浏览 603回答 3
3回答

慕田峪9158850

我最好的建议是,没有标准的树数据结构,因为有太多的方法可以实现它,所以不可能用一个解决方案覆盖所有的基础。解决方案越具体,就越不可能适用于任何给定的问题。我甚至对LinkedList很恼火-如果我想要一个循环链接列表呢?您需要实现的基本结构是一个节点集合,下面是一些可以让您开始工作的选项。让我们假设类Node是整个解决方案的基类。如果您只需要在树下导航,那么Node类需要一个子类列表。如果您需要在树上导航,那么Node类需要一个指向它的父节点的链接。构建一个Addchild方法,该方法负责处理这两个点的所有细节以及必须实现的任何其他业务逻辑(子限制、子逻辑排序等)。

泛舟湖上清波郎朗

我不愿承认这一点,但最后我用链接列表编写了自己的树类。在一个无关的注意,我刚刚发现了这个圆形的东西,当连接到一个东西,我称之为‘轴’允许更容易的货物运输。

白板的微信

delegate&nbsp;void&nbsp;TreeVisitor<T>(T&nbsp;nodeData);class&nbsp;NTree<T>{ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;T&nbsp;data; &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;LinkedList<NTree<T>>&nbsp;children; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;NTree(T&nbsp;data) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.data&nbsp;=&nbsp;data; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;children&nbsp;=&nbsp;new&nbsp;LinkedList<NTree<T>>(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;AddChild(T&nbsp;data) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;children.AddFirst(new&nbsp;NTree<T>(data)); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;NTree<T>&nbsp;GetChild(int&nbsp;i) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(NTree<T>&nbsp;n&nbsp;in&nbsp;children) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(--i&nbsp;==&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;n; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;Traverse(NTree<T>&nbsp;node,&nbsp;TreeVisitor<T>&nbsp;visitor) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visitor(node.data); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(NTree<T>&nbsp;kid&nbsp;in&nbsp;node.children) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Traverse(kid,&nbsp;visitor); &nbsp;&nbsp;&nbsp;&nbsp;}}简单的递归实现.。<40行代码.。您只需要在类之外保存对树根的引用,或者将其包装在另一个类中,可能将其重命名为TreeNode?
随时随地看视频慕课网APP
我要回答