重建二叉树

来源:互联网 发布:linux exec用法 编辑:程序博客网 时间:2024/06/03 18:14

牛客网 《剑指offer》

时间限制:1秒 空间限制:32768K 热度指数:220072

题目描述

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

解题思路

这里写图片描述

这里写图片描述

前序遍历的第一个结点为根节点

中序遍历的根结点的左边为左子树,右边为右子树

于是,递归

程序

python 2.7

# -*- coding:utf-8 -*-# class TreeNode:#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution:    # 返回构造的TreeNode根节点    def reConstructBinaryTree(self, pre, tin):        # write code here        if not pre or not tin:            return None        if 1 == len(pre):            return TreeNode(pre[0])        root = TreeNode(pre[0])        index = tin.index(pre[0])        root.left = self.reConstructBinaryTree(pre[1:index + 1], tin[:index])        root.right = self.reConstructBinaryTree(pre[1 + index:], tin[index + 1:])        return root

结果

运行时间:57ms占用内存:5768k
原创粉丝点击