654.最大二叉树
给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:
二叉树的根是数组中的最大元素。
左子树是通过数组中最大值左边部分构造出的最大二叉树。
右子树是通过数组中最大值右边部分构造出的最大二叉树。
通过给定的数组构建最大二叉树,并且输出这个树的根节点。
示例 :
思路
参考:
很显然是递归的思路,和构建树差不多。
class TreeNode(object):def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightclass Solution(object):def constructMaximumBinaryTree(self, nums):""":type nums: List[int]:rtype: TreeNode"""# 第一步 特殊情况处理if len(nums) == 0:return None# 第二步 找出最大值及其索引max_val = max(nums)root = TreeNode(val=max_val) # 构建根节点split_index = nums.index(max_val) # 找出最大值的索引# 第三步 确定左右的numsleft_nums = nums[:split_index]right_nums = nums[split_index+1:]# 第四步 递归root.left = self.constructMaximumBinaryTree(left_nums)root.right = self.constructMaximumBinaryTree(right_nums)return root