如何从给定的遍历方法(按序,后序或预订)中找到二叉树?
答案 0 :(得分:3)
答案 1 :(得分:3)
只有一次遍历(有序,预购或后序),你无法做到这一点。
如果Inorder&给出了树的前序遍历:
因此我们找到了根元素并将我们的顺序分为左子树顺序,右子树顺序和左子树预先排序和右子树预顺序。所以我们可以通过递归来做到这一点,直到只剩下一个节点。
同样,我们可以为Inorder和Postorder做,其中root将是后期订单的最后一个元素。
答案 2 :(得分:1)
如果你想使用遍历结果恢复原始树,那么我有一些坏消息 - 没有明确的解决方案。会有几棵树可以产生相同的遍历结果。
例如,对于inorder遍历以下树将产生相同的结果:1, 2, 3
2 3 1
/ \ / \
1 3 2 2
/ \
1 3
答案 3 :(得分:1)
(好的,既然我们已经确定amended question应该在这里,也可以在那里发布我的答案)
下面给出了二叉树的Postorder和Inorder遍历。是否可以从这些遍历中获取唯一的二叉树?
有可能。
在后序遍历(左右根)中,整个树的根节点始终是最后一个(在您的情况下,它是A)。在inorder遍历(左 - 右 - 右)中,根之前的节点属于左子树,而根之后的节点属于右子节点。由于我们已经确定了根,我们可以确定左子树和右子树中的节点。
确定后,我们可以在后序列表中分隔左右子树。所以,现在我们确定了左右子树和根节点:
postorder: left|right|root
inorder : left|root|right
现在我们只需递归构造左右子树。鳍。