【发布时间】:2017-10-02 10:18:53
【问题描述】:
是否可以构造二叉树。如果二叉树的前序遍历和它的镜像树都给出。如果有怎么办?
二叉树的前序 - 1,2,4,5,6,3,7
这棵树的镜像预排序 - 1,3,7,2,5,6,4
【问题讨论】:
标签: tree binary-tree mirror preorder
是否可以构造二叉树。如果二叉树的前序遍历和它的镜像树都给出。如果有怎么办?
二叉树的前序 - 1,2,4,5,6,3,7
这棵树的镜像预排序 - 1,3,7,2,5,6,4
【问题讨论】:
标签: tree binary-tree mirror preorder
当然可以。
在您的示例中,您知道树的根是 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 个值,如果是,则拆分,因为值可能不会保持精确的顺序,您可能需要在检查之前进行排序,或者将它们放在一组中。
【讨论】: