我正在尝试了解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以及为什么它被用于其他遍历,那将非常感激。感谢。
答案 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