Sword_Offer 重建二叉树[7]
0x00 题目描述
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果都不含重复的数字.例如:输入前序遍历序列[1,2,4,7,3,5,6,8]和中序遍历序列[4,7,2,1,5,3,8,6].重建二叉树如下并输出它的头节点
0x01 解题思路
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author LQ6H
class TreeNode:
def __init__(self,val):
self.data=val
self.left=None
self.right=None
class Solution:
def Construct(self,preorder,inorder):
"""
:param preorder: List[int]
:param inorder: List[int]
:return: root(TreeNode)
"""
if not preorder or not inorder:
return None
if len(preorder)==1:
return TreeNode(preorder[0])
root=TreeNode(preorder[0])
idx=inorder.index(preorder[0])
root.left=self.Construct(preorder[1:idx+1],inorder[:idx])
root.right=self.Construct(preorder[idx+1:],preorder[idx+1:])
return root