C#中的树数据结构

C#中的树数据结构

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

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

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


慕的地8271018
浏览 536回答 3
3回答

萧十郎

我最好的建议是没有标准的树数据结构,因为有很多方法可以实现它,用一个解决方案覆盖所有基础是不可能的。解决方案越具体,它就越不可能适用于任何给定的问题。我甚至对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,查看更多内容
随时随地看视频慕课网APP