剑指Offer
重建二叉树
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
根据前序和中序序列重建二叉树
Leetcode有相同的题,Leetcode用习惯了用不好牛客网的
代码:
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回构造的TreeNode根节点
def reConstructBinaryTree(self, pre, tin):
# write code here
if len(pre)==0:
root = None
return []
root = self.buildtree(pre, tin)
return root
def buildtree(self, pret, tint):
if len(pret)==0:
return None
t = pret[0]
root = TreeNode(t)
index = tint.index(t)
tin_left = tint[:index]
# print(index)
if index==len(tint)-1:
tin_right = []
else:
tin_right = tint[index+1:]
if len(tin_right)==0:
pre_right = []
else:
pre_right = pret[len(tin_left)+1:]
if len(tin_left) == 0:
pre_left = []
else:
pre_left = pret[1:len(tin_left)+1]
root.left = self.buildtree(pre_left, tin_left)
root.right = self.buildtree(pre_right, tin_right)
return root