题解 | #重建二叉树#

重建二叉树

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

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param pre int整型一维数组 
# @param vin int整型一维数组 
# @return TreeNode类
#
class Solution:
    def reConstructBinaryTree(self , pre: List[int], vin: List[int]) -> TreeNode:
        n = len(pre)
        m = len(vin)
        # 每个遍历都不能为0
        if n == 0 or m == 0:
            return None
        # 构建根节点
        root = TreeNode(pre[0])
        for i in range(len(vin)):
            # 找到中序遍历中的前序第一个元素
            if pre[0] == vin[i]:
                # 左子树的前序遍历
                leftpre = pre[1:i+1]
                # 左子树的中序遍历
                leftvin = vin[:i]
                # 构建左子树
                root.left = self.reConstructBinaryTree(leftpre, leftvin)
                # 右子树的前序遍历
                rightpre = pre[i+1:]
                # 右子树的中序遍历
                rightvin = vin[i+1:]
                # 构建右子树
                root.right = self.reConstructBinaryTree(rightpre, rightvin)
                break
        return root

#23届找工作求助阵地#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务