python JZ7 重建二叉树(剑指offer)

题目要求:

思路:

思路1:伪代码

重构函数(前序遍历结果,中序遍历结果)
	先判断前序遍历结果列表是否大于1:
		根据前序遍历结果拿到当前树根节点TreeNode(pre[0])
		将当前树分为左右子树,然后获取左右子树的前序遍历结果,中序遍历结果
		当前根结点的左子节点 = 重构函数(左子树前序遍历结果,左子树中序遍历结果)
		当前根结点的右子节点 = 重构函数(右子树前序遍历结果,右子树中序遍历结果)
	再判断前序遍历结果列表是否等于1:
		说明该根节点无左右子树,直接返回根节点即可
	否则:
		说明没有该二叉树直接返回 None
代码如下:
# 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:
        if len(pre) > 1:
            node = TreeNode(pre[0])
            leftVArr = vin[0:vin.index(node.val)]
            leftPArr,rightPArr = [],[]
            for i in range(1, len(pre)):
                if pre[i] in leftVArr:
                    leftPArr.append(pre[i])
                else:
                    rightPArr.append(pre[i])
            rightVArr = vin[vin.index(node.val) + 1:len(vin)]
            node.left = self.reConstructBinaryTree(leftPArr, leftVArr)
            node.right = self.reConstructBinaryTree(rightPArr, rightVArr)
            return node
        elif len(pre) == 1:
            return TreeNode(pre[0])
        else:
            return None
        
        # write code here
运行效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值