【问题标题】:Composite Pattern Iterator without recursion没有递归的复合模式迭代器
【发布时间】:2010-10-05 22:47:46
【问题描述】:

有没有人写过或考虑过在不使用递归的情况下为复合(树)结构编写迭代器? 如果是这样,你能分享你的想法吗?谢谢

编辑:我在考虑使用 Java 语言。

【问题讨论】:

    标签: recursion iterator design-patterns composite


    【解决方案1】:

    无需递归即可遍历树很简单。假设一棵二叉树,每个节点大概有三个对其他节点的引用。左孩子,右孩子和父母。 所以假设一个深度优先的从左到右的迭代顺序,你在一个while-lop中遵循左子引用(伪代码while current.left-child != null, current = current.left-child) 如果没有左孩子,你试试右孩子。如果也没有正确的孩子,你就往上走,直到找到一个正确的孩子(while current.right-child == null, current = current.parent

    您没有指定一种语言,但由于您想避免递归,我将假设它是某种命令式语言,那么上述应该是可能的。

    简而言之,您的迭代器必须持有对当前节点的引用,以及一些关于其行进方式的信息。

    【讨论】:

    • 同意二叉树遍历,但我不想假设二叉树。
    • 好吧,如果不对它的结构做出某种假设,就很难遍历一棵树。对于任何树结构,都可以简单地修改相同的方法。遍历其子节点,然后到达父节点并尝试下一个子节点
    【解决方案2】:

    您可能会从这个 SO 问题中得到一些启发: Post order traversal of binary tree without recursion 您所需要的只是将算法扩展到非二叉树。

    【讨论】:

      猜你喜欢
      • 2018-08-26
      • 1970-01-01
      • 2011-04-17
      • 2020-10-31
      • 2020-11-14
      • 2016-07-21
      • 2011-05-11
      • 1970-01-01
      • 2010-10-10
      相关资源
      最近更新 更多