题目:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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 = None
class Solution:
# 返回构造的TreeNode根节点
def reConstructBinaryTree(self, pre, tin):
# write code here
if not pre or not tin or len(pre) != len(tin): return
return self.reconstruct(pre, tin, 0, len(pre)-1, 0, len(tin)-1)
def reconstruct(self, pre, tin, preStart, preEnd, tinStart, tinEnd):
rootValue = pre[preStart]
rootIndex = tin.index(rootValue)
root = TreeNode(rootValue)
if preStart == preEnd:
return root
if rootIndex > tinStart:
root.left = self.reconstruct(pre, tin, preStart + 1, rootIndex - tinStart + preStart, tinStart, rootIndex - 1)
if tinEnd > rootIndex:
root.right = self.reconstruct(pre, tin, rootIndex - tinStart + preStart + 1, preEnd, rootIndex + 1, tinEnd)
return root