题解 | #重建二叉树#

重建二叉树

https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6

前序确定根节点值,带入中序,找到中序中根节点位置。
根据根节点位置将前序和中序都分为左右子序列,化成原问题两个子问题,然后递归求解。
class Solution:
    def reConstructBinaryTree(self , pre: List[int], vin: List[int]) -> TreeNode:
        # 终止条件,之后没有节点了
        if not vin:
            return None
        idx = vin.index(pre[0])
        lvin= vin[:idx]                 # 左子树中序,越界返回空
        rvin = vin[idx+1:]              # 右子树中序,越界返回空
        lpre = pre[1:idx+1]             # 左子树前序,越界返回空
        rpre = pre[idx+1:]              # 右子树前序,越界返回空
        print(lvin, rvin, lpre, rpre)
        # 递归建树
        head = TreeNode(pre[0])
        left = self.reConstructBinaryTree(lpre, lvin)
        head.left = left
        right = self.reConstructBinaryTree(rpre, rvin)
        head.right = right
        return head


全部评论

相关推荐

爱读书的放鸽子能手很...:刷个两端实习,冲春招,流水线什么时候不能去
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务