重建二叉树

来源:互联网 发布:长沙网络推广 编辑:程序博客网 时间:2024/05/18 07:24

题目描述:


输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。


答案:

答案思路:

前序遍历中第一个元素为二叉树的root,在中序遍历中找到root,左边是左子树,右边是右子树,例子中1左边2,4,7为左子树,1右边3,5,6,8为右子树。再回到前序遍历中,2作为左子树的第一个元素,以2为分界在中序遍历中找左右子树,可以看到只有左子树4,7。再回到前序遍历中,4作为左子树的第一个元素,在中序中找到4,可以看到只有右子树7,以此类推可以分析出以1为root的右子树的结构。

class Solution:        def reConstructBinaryTree(self, pre, tin):        # write code here        if len(pre) == 0:            return None        if len(pre) == 1:            return TreeNode(pre[0])        else:            flag = TreeNode(pre[0])            flag.left = self.reConstructBinaryTree(pre[1:tin.index(pre[0])+1],tin[:tin.index(pre[0])])            flag.right = self.reConstructBinaryTree(pre[tin.index(pre[0])+1:],tin[tin.index(pre[0])+1:])        return flag