【发布时间】:2010-10-05 22:47:46
【问题描述】:
有没有人写过或考虑过在不使用递归的情况下为复合(树)结构编写迭代器? 如果是这样,你能分享你的想法吗?谢谢
编辑:我在考虑使用 Java 语言。
【问题讨论】:
标签: recursion iterator design-patterns composite
有没有人写过或考虑过在不使用递归的情况下为复合(树)结构编写迭代器? 如果是这样,你能分享你的想法吗?谢谢
编辑:我在考虑使用 Java 语言。
【问题讨论】:
标签: recursion iterator design-patterns composite
无需递归即可遍历树很简单。假设一棵二叉树,每个节点大概有三个对其他节点的引用。左孩子,右孩子和父母。
所以假设一个深度优先的从左到右的迭代顺序,你在一个while-lop中遵循左子引用(伪代码while current.left-child != null, current = current.left-child)
如果没有左孩子,你试试右孩子。如果也没有正确的孩子,你就往上走,直到找到一个正确的孩子(while current.right-child == null, current = current.parent)
您没有指定一种语言,但由于您想避免递归,我将假设它是某种命令式语言,那么上述应该是可能的。
简而言之,您的迭代器必须持有对当前节点的引用,以及一些关于其行进方式的信息。
【讨论】:
您可能会从这个 SO 问题中得到一些启发: Post order traversal of binary tree without recursion 您所需要的只是将算法扩展到非二叉树。
【讨论】: