我理解预订,有序和后序树遍历算法就好了。 (Reference)。我理解了一些用法:按顺序遍历二进制搜索树,预先克隆树。但是我不能为我的生活提出一个现实世界的任务,我需要进行后序遍历才能完成。
你能举个例子吗?并且:你能为我提供更好的预购遍历用途吗?编辑:除了表达式树和RPN之外,还有谁可以给我一个例子吗?这真的是所有的后期订单都有用吗?
答案 0 :(得分:12)
Topological sorting是树的后序遍历(或有向无环图)。
这个想法是图表的节点代表任务,从A
到B
的边缘表示必须在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)
}