Algorithm 迭代k叉树的前序和后序遍历

Algorithm 迭代k叉树的前序和后序遍历,algorithm,tree,iteration,Algorithm,Tree,Iteration,我有一个k元树,我想使用迭代遍历它 它是一个场景图,因此每次遇到变换节点时,我都会将其矩阵放在堆栈上,每次遇到网格节点时,都会使用矩阵堆栈进行渲染。这两者都必须是预购的。 但是,当处理变换节点的所有子节点时,其矩阵必须从矩阵堆栈中弹出。因此,我还需要一个后订单操作 我发现了一些用于迭代后序遍历的算法,但总是用于二叉树,并且没有额外的预序操作。这是未经测试的,所以请谨慎对待 解决这一问题的基本思路是在第一次遇到节点时将其标记为已访问。然后把所有的子对象放在堆栈上 如果遇到没有子节点的叶节点,可以对

我有一个k元树,我想使用迭代遍历它

它是一个场景图,因此每次遇到变换节点时,我都会将其矩阵放在堆栈上,每次遇到网格节点时,都会使用矩阵堆栈进行渲染。这两者都必须是预购的。 但是,当处理变换节点的所有子节点时,其矩阵必须从矩阵堆栈中弹出。因此,我还需要一个后订单操作


我发现了一些用于迭代后序遍历的算法,但总是用于二叉树,并且没有额外的预序操作。

这是未经测试的,所以请谨慎对待

解决这一问题的基本思路是在第一次遇到节点时将其标记为已访问。然后把所有的子对象放在堆栈上

如果遇到没有子节点的叶节点,可以对其进行保存打印/处理并从堆栈中弹出

当堆栈上的下一个节点已经被访问时,所有子节点都必须在访问之前被处理过,否则堆栈就不会被清除到目前为止。
现在我们知道,对于具有任意数量子节点的临时节点,它可以按后序处理。

前序和后序只是在递归代码中交换调用的问题。这是正确的,但我不想使用递归。我只想使用迭代进行遍历,如
。如果不使用递归,还必须使用堆栈(可能与矩阵堆栈相同的堆栈)来跟踪您所在的位置。“您所在位置”的精确定义取决于树数据结构的详细信息,但它可能是节点子节点列表的迭代器。堆栈允许我列出已发现但未处理的节点,但它如何帮助我处理post-order,我必须知道何时处理了一个节点的所有子节点?