题目内容
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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:
return
head=pre[0]
root=TreeNode(head)
site=tin.index(head)
left_tin=tin[:site]
right_tin=tin[site+1:]
left_pre=pre[1:len(left_tin)+1]
right_pre=pre[len(left_tin)+1:]
root.left=self.reConstructBinaryTree(left_pre,left_tin)
root.right=self.reConstructBinaryTree(right_pre,right_tin)
return root