【发布时间】:2011-08-05 09:17:55
【问题描述】:
拥有一棵树(在 DB 中是逻辑的),其中包含表单中的项目
- 列表项 A
- 列表项 B
- 列表项 C
- 列表项 D
- 列表项 E
- 列表项 F
- 列表项 G
以此类推(嵌套深度不限),我想从任意节点开始向下(或向上)下一个节点。
假设给定List Item D,我想编写一个函数GetNextNode(),它会返回List Item E。
我的想法是做一些递归的东西,但也许有更聪明的方法来处理这个?
我的问题:
你会怎么解决这个问题?
编辑 1:
可以使用以下函数访问树:
GetParentNode()GetChildrenNodes()GetNextSiblingNode()- 等
所以它类似于例如e Windows 窗体TreeView。
【问题讨论】:
-
您是在问如何将其存储在数据库中,您的项目是否已经在表单的 TreeView 中,或者如何创建类似的东西?
-
你能多说一下树的结构是如何表示的吗?
-
有许多 许多 不同的迭代树的方法 - 所谓的“树遍历”是一个复杂的主题。 > en.wikipedia.org/wiki/Tree_traversal
-
@MattDavey 我知道这有点晚了:) 但是大多数树操作都可以在没有递归的情况下完成。这对于堆栈空间有限和/或每个子例程成本高的系统来说是必需的。尽管如果递归在子例程的尾部,一个体面的编译器通常可以将其优化掉。当然,使用递归的版本通常更容易阅读。