二叉树构造

Binary tree construction

是否可以构建二叉树。如果二叉树的前序遍历和它的镜像树都给出了。如果有怎么办?
二叉树的预序 - 1,2,4,5,6,3,7
这棵树的镜像的预序 - 1,3,7,2,5,6,4

当然可以。

在您的示例中,您知道树的根是 1。接下来的问题是找出所有剩余值 [2,4,5,6,3,7],哪些属于左子树,哪些属于右子树。然后,您可以简单地对这两个组进行递归调用,并将这些子树与根连接起来。

现在假设[2,4,5]形成左子树。因此,来自右子树 [6,3,7] 的所有值必须位于镜像数组中的任何这些值之前。这里不是这种情况。所以我们必须找到一个新的点来分割它们。

现在让[2,4,5,6]形成左子树。因此,[3,7] 必须形成正确的一个。那么在镜像中,所有 [3,7] 必须在任何 [2,4,5,6] 之前。这似乎是这里的情况。

总而言之,对于从 0 到剩余值长度的每个 i(除 1 外),检查普通树中的前 i 个值是否等于镜像中的最后 i 个值,如果是则拆分,因为值可能无法保持精确顺序,您可能需要在检查之前进行排序,或者将它们放在一个集合中。