2019-08-22剑指 重建二叉树
2019-08-22 本文已影响0人
mztkenan
class Solution:
# 返回构造的TreeNode根节点
def reConstructBinaryTree(self, pre, tin):
if not pre or not tin:return None
if len(pre)==1:return TreeNode(pre[0])
root=pre[0]
index=tin.index(root)
l=self.reConstructBinaryTree(pre[1:index+1],tin[:index]) #if index+1<=len(pre) else None #这里可以省略
r=self.reConstructBinaryTree(pre[index+1:],tin[index+1:])#if index+1<len(pre) else None # 这里可以省略
root=TreeNode(root)
root.left=l
root.right=r
return root
以下为错误代码
class Solution:
# 返回构造的TreeNode根节点
def reConstructBinaryTree(self, pre:List, tin:List):
if not pre or not tin:return None
if len(pre)==1:return TreeNode(pre[0])
print(pre,tin)
root=pre[0]
index=tin.index(root)
mid=pre.index(tin[:index][-1]) # [1, 2, 4, 3, 5, 6] [4, 2, 1, 5, 3, 6]这里出错了 ,2并不是左子树最后一个
l=self.reConstructBinaryTree(pre[1:mid+1],tin[:index]) if mid+1<=len(pre) else None
r=self.reConstructBinaryTree(pre[mid+1:],tin[index+1:])if mid+1<len(pre) else None # 这里+1别忘记
root=TreeNode(root)
root.left=l
root.right=r
return root