已知中序遍历和任一顺序遍历重构二叉树
重建二叉树
http://www.nowcoder.com/questionTerminal/8a19cbe657394eeaac2f6ea9b0f6fcf6
利用递归的思想完成树的重建,一个是递归截至条件:当传入list长度为0的时候停止递归;另一个是将一颗树分解成左边和右边两个部分分别递归;最后返回数就行了
class Solution:
# 返回构造的TreeNode根节点
def reConstructBinaryTree(self, pre, tin):
# write code here
if len(pre)==0:
return
root = TreeNode(pre[0])
for i in range(len(tin)): # 在中序中找到左右分割点
if tin[i] == root.val:
leftIndex =i
break
leftpre = pre[1:leftIndex+1] # 将pre和tin分别分成两个部分
rightpre = pre[leftIndex+1:]
lefttin = tin[:leftIndex]
righttin = tin[leftIndex+1:]
root.left = self.reConstructBinaryTree(leftpre,lefttin) # 递归
root.right = self.reConstructBinaryTree(rightpre,righttin)
return root