PostOrder遍历树而不使用递归或堆栈

时间:2012-05-21 23:43:42

标签: c algorithm

  

可能重复:
  Post order traversal of binary tree without recursion

我正在通过Morris的二叉树中的inorder遍历算法。 有人可以建议是否有办法遍历postorder而不使用递归和堆栈?

1 个答案:

答案 0 :(得分:2)

您可以使用threaded tree执行此操作。以下是该方法的概述(摘自here - 见幻灯片31):

  • 后序:创建一个以root为后代的虚拟节点。
  • 变量可用于检查当前操作的类型。
  • 如果操作是遍历,当前节点有左后代,则后代 遍历了。否则,操作会更改为正确的遍历。
  • 如果操作是正确遍历且当前节点具有左后代,则操作已更改 离开遍历。否则操作已更改为访问节点。
  • 如果操作正在访问节点:访问当前节点,之后是其后订单后继节点 必须找到。
  • 如果当前节点的父节点可通过线程访问(即当前节点是父节点 left child)然后将遍历设置为继续使用父级的右后代。
  • 如果当前节点没有正确的后代,则这是右扩展链的末尾 节点。
  • 首先:通过当前节点的线程到达链的开头。
  • 第二:链中节点的右引用相反。
  • 最后:向后扫描链,访问每个节点,然后右对齐 恢复到之前的设置。

如上所述,如果对树结构使用临时修改,也可以在没有线程的情况下完成。