剑指offer 06 重建二叉树

来源:互联网 发布:网络教育心理学专业 编辑:程序博客网 时间:2024/05/18 02:10

题目描述

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

思路:

根据前序第一个数,找到在中序的下标。下标左边是左子树,右边是右子树。递归遍历。

# -*- 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 len(pre) == 0 or len(tin) == 0:            return None        tree = TreeNode(pre[0])        #寻找数字在中序中的位置        index = 0        for i in tin:            if i == pre[0]:                break            index += 1        if len(tin[:index]) == 0:            tree.left = None        else:            tree.left = self.reConstructBinaryTree(pre[1:1 + index], tin[:index])        if len(tin[index + 1:]) == 0:            tree.right = None        else:            tree.right = self.reConstructBinaryTree(pre[1 + index:], tin[index + 1:])        return tree