1.python代码
# -*- 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:
return None
if len(pre) == 1:
return TreeNode(pre[0])
else:
root = TreeNode(pre[0])
temp = tin.index(pre[0])
root.left = self.reConstructBinaryTree(pre[1:temp+1], tin[:temp])
root.right = self.reConstructBinaryTree(pre[temp+1:], tin[temp+1:])
return root
使用递归进行重建二叉树。
前序中第一个值必是根,找到该值在中序中的位置,即可确定该位置左侧的是左分支,右侧是右分支。
例如:前序为[1,2,4,7,3,5,6,8],中序为[4,7,2,1,5,3,8,6]
传入的root的left为【2,4,7】,中序为【4,7,2】
传入的root的right为【3,5,6,8】,中序为【5,3,8,6】
继续迭代即可。