真实世界的前/后顺序树遍历示例

时间:2010-08-20 15:34:01

标签: algorithm binary-tree tree-traversal postorder

我理解预订,有序和后序树遍历算法就好了。 (Reference)。我理解了一些用法:按顺序遍历二进制搜索树,预先克隆树。但是我不能为我的生活提出一个现实世界的任务,我需要进行后序遍历才能完成。

你能举个例子吗?并且:你能为我提供更好的预购遍历用途吗?

编辑:除了表达式树和RPN之外,还有谁可以给​​我一个例子吗?这真的是所有的后期订单都有用吗?

3 个答案:

答案 0 :(得分:12)

Topological sorting是树的后序遍历(或有向无环图)。

这个想法是图表的节点代表任务,从AB的边缘表示必须在A之前执行B。拓扑排序将按顺序排列这些任务,使得任务的所有依赖关系都比任务本身更早出现。像UNIX make这样的构建系统必须实现这个算法。

Dario提到的例子 - 用手动内存管理破坏树的所有节点 - 就是这个问题的一个例子。毕竟,销毁节点的任务取决于其子节点的破坏。

答案 1 :(得分:8)

编辑后使用(可以)订单。考虑a + b + c的表达式树,机器语言需要像a b + c +这样的序列。这也称为Reverse polish Notation(RPN)。在维基百科页面上,它说:“RPN又名Postfix”

破坏树也需要下订单,就像创建/克隆它需要预先订购一样。

答案 2 :(得分:4)

Henk Holterman指出,使用手动内存管理破坏树通常是一种后序遍历。

伪代码:

destroy(node) {
  if (node == null) return;

  destroy(node.left)
  destroy(node.right)

  // Post-order freeing of current node
  free(node)
}