654.最大二叉树
给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:
二叉树的根是数组中的最大元素。
左子树是通过数组中最大值左边部分构造出的最大二叉树。
右子树是通过数组中最大值右边部分构造出的最大二叉树。
通过给定的数组构建最大二叉树,并且输出这个树的根节点。
示例 :
思路
参考:
很显然是递归的思路,和构建树差不多。
class TreeNode(object):
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class 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) # 找出最大值的索引
# 第三步 确定左右的nums
left_nums = nums[:split_index]
right_nums = nums[split_index+1:]
# 第四步 递归
root.left = self.constructMaximumBinaryTree(left_nums)
root.right = self.constructMaximumBinaryTree(right_nums)
return root