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
上一篇下一篇

猜你喜欢

热点阅读