当前位置: 首页 > 后端技术 > Python

力扣-0654.最大二叉树【Python】

时间:2023-03-26 12:30:34 Python

问题LeetCode给定一个没有重复项的整数数组。在此数组上构建的最大树定义如下:根是数组中的最大数。左子树是从左部分子数组除以最大数构建的最大树。右子树是由右部分子数组除以最大数构造的最大树。通过给定的数组构造最大树,并输出这棵树的根节点。例1:【外链图片传输失败,源站可能有防盗链机制,建议保存图片直接上传(img-bTSB8rfA-1609944183381)(https://assets.leetcode.com/u...]输入:nums=[3,2,1,6,0,5]输出:[6,3,5,null,2,0,null,null,1]示例2:[外部链接图片传输失败,源站可能有防盗链机制,建议保存图片直接上传(img-w7UzhSQ2-1609944183394)(https://assets.leetcode.com/u...]输入:nums=[3,2,1]Output:[3,null,2,null,1]Constraints:1<=nums.length<=10000<=nums[i]<=1000nums中的所有整数都是唯一的问题给定一个不包含重复元素的整数数组nums。直接从该数组递归构造的最大二叉树定义如下:二叉树的根是数组nums中的最大元素。左子树是由数组中最大值的左边部分递归构造的最大二叉树。右子树是由数组中最大值的右边部分递归构造的最大二叉树。返回由给定数组nums构造的最大二叉树。例1:【外链图片传输失败,源站可能有防盗链机制,建议保存图片直接上传(img-3pLMglok-1609944183402)(https://assets.leetcode.com/u...]输入:nums=[3,2,1,6,0,5]输出:[6,3,5,null,2,0,null,null,1]解释:递归调用看起来像这样:-[3,2,1,6,0,5]最大值是6,左边部分是[3,2,1],右边部分是[0,5]。-中的最大值[3,2,1]是3,左边是[],右边是[2,1]。-空数组,没有子节点。-[2,1]中的最大值是2,左边部分是[],右边部分是[1]。-空数组,没有孩子。-只有一个元素,所以孩子是值为1的节点。-[0,5]中的最大值为5,左边是[0],右边是[]。-只有一个元素,所以子节点是值为0的节点。-空数组,没有子节点。示例2:输入:nums=[3,2,1]输出:[3,null,2,null,1]提示:1<=nums.length<=10000<=nums[i]<=1000allinnums整数互不相同递归1.遍历找到数组的最大值和对应的下标2.递归调用最大值左右两侧的数组构造左右子树Python3代码#定义为二叉树节点。#classTreeNode:#def__init__(self,x):#self.val=x#self.left=None#self.right=Noneclass>TreeNode:#如果不是则特殊判断nums:returnNone#查找数组中的最大值和对应的索引maxVal=max(nums)maxIndex=nums.index(maxVal)root=TreeNode(nums[maxIndex])#递归构造左右子树root.left=self.constructMaximumBinaryTree(nums[:maxIndex])root.right=self.constructMaximumBinaryTree(nums[maxIndex+1:])returnrootGitHublinkPython