如果T是具有多个节点的有序树。是否有可能T的预先遍历以与T的后序遍历相同的顺序访问节点? 如果“是”,请举个例子。如果“不”,请解释为什么不能发生?
答案 0 :(得分:1)
除非我遗漏了一些痛苦明显的东西,否则答案是否定的。有序树> 1个节点(例如,2个节点)将如下所示。
A B
或
A C
订单后遍历以左右根顺序访问节点,并按照从左 - 右 - 右的顺序预先访问节点。为了让它们产生相同的输出,“left”必须等于“root”,这是没有意义的。通过上面的例子,预订将分别产生AB或AC,并且下订单将产生BA和CA.
答案 1 :(得分:1)
在一般情况下,树的叶子是唯一的,因此,如果您正在进行预订或后序遍历,那么它应该以相反的方式出现。
但是,我可以看到两种情况,其中前后遍历是相同的:单身和重复元素。
使用单身人士,你只有一个节点,所以如果你在寻找零叶之前或之后访问它都没关系。
如果您的树中有重复元素,该怎么办?如果插入策略是接受任何大于或等于根节点的元素,那么它们将显示为右侧的退化树:
A
\
A
\
A
\
A
如果它小于或等于根节点,你仍然有一个退化树,但是在左边。
现在,如果您的插入策略是丢弃重复元素,那么您将留下单例大小写,它仍然具有前后顺序遍历,从而产生相同的元素。