Euler Tour算法与Pre-order遍历基本相同吗?

时间:2016-10-06 16:04:35

标签: data-structures tree tree-traversal graph-traversal preorder

我正在尝试了解Euler Tour算法及其为树遍历而流行的原因。但是,我没有看到Euler Tour和树的预订遍历之间的区别。

假设你有树:

     A
    / \
   B   E
  / \   \
 C   D   F

如果你执行了euler tour算法,它将是:

A -> B -> C -> B -> D -> B -> A -> E -> F -> E -> A

但是这个目的是什么?它看起来就像是递归预订的完全相同的版本:

A -> B -> C -> D -> E -> F

显然,在Euler Tour中,路径中每个节点值至少有两次,但这只是因为编程时算法的递归性质。如果你愿意,你可以做与Euler Tour相同的计算......预购,对吧?

如果有人可以帮助解释Euler Tour以及为什么它被用于其他遍历,那将非常感激。感谢。

2 个答案:

答案 0 :(得分:0)

通过Euler之旅,您可以从结果中获取其他信息。

例如,您可以查看节点是否为叶子。如果节点的前驱者和后继者是相同的,则会出现这种情况。

此外,您可以通过向每个前腿的计数器添加+1并为每个后腿减去1来计算节点的深度。

在处理算法中的树时,这些信息通常很有用。

答案 1 :(得分:-1)

请注意,您的Euler游览中也包含邮购信息。如果仅在列出最后一个节点的时间列出每个节点,我们将得到

C -> D -> B -> F -> E -> A

很遗憾,我们无法从游览中获得顺序(对称顺序)。在您的示例中,从查看节点E及其子节点F可以很明显地看出,我们实际上无法看到子节点是左还是右。

可以将欧拉遍历方法 扩展一些,以包括树的三个递归顺序(前后)。遵循树的轮廓,并在进入左子节点之前,左子节点与右子节点之间以及右子节点之后,访问每个节点3次。如果孩子失踪,请连续探视。

我们可以通过以下方式扩展您的示例,为之前的游览添加数字:

A1 -> B1 -> C123 -> B2 -> D123 -> B3 -> A2 -> E12 -> F123 -> E2 -> A3