题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}
递归思想:
class BintNode:
def __init__(self,data,left=None,right=None):
self.data=data
self.left=left
self.right=right
class Solution:
def BuiltTree(self,p1,p2):
if len(p1)==0 or len(p2)==0:
return None
if len(p1)==1:
return (BintNode(p1[0]))
else:
for i in range(len(p2)): #找到根结点的位置
if p2[i]==p1[0]:
break
leftTree=self.BuiltTree(p1[1:i+1],p2[0:i]) #递归调用左子树的先序遍历和中序遍历
rightTree=self.BuiltTree(p1[i+1:],p2[i+1:]) #递归调用右子树的先序遍历和中序遍历
return(BintNode(p1[0],leftTree,rightTree))
#测试
ls1=[1,2,4,7,3,5,6,8]#先序遍历序列
ls2=[4,7,2,1,5,3,8,6]#中序
solution=Solution()
solution.BuiltTree(ls1,ls2)