654. 最大二叉树
原始题目链接:https://leetcode-cn.com/problems/maximum-binary-tree/
给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下:
二叉树的根是数组 nums 中的最大元素。
左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。
右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。
返回有给定数组 nums 构建的 最大二叉树 。
解题思路:
递归构建最大二叉树即可。 递归的三要素:
- 定义递归函数的功能
- 寻找递归结束条件
- 找出递归函数的等价关系式
代码实现:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def constructMaximumBinaryTree(self, nums: List[int]) -> TreeNode:
# 递归3要素:1、递归函数功能;2、递归结束条件;3、递归函数等价关系式
# constructMaximumBinaryTree:构造最大二叉树
# 递归结束条件
if len(nums) == 0:
return
# 寻找最大值及其索引
max_num = max(nums)
max_index = nums.index(max_num)
# 构造节点
root = TreeNode(max_num)
# 递归等价函数关系式
root.left = self.constructMaximumBinaryTree(nums[0: max_index])
root.right = self.constructMaximumBinaryTree(nums[max_index + 1 :])
return root
参考文献:
https://leetcode-cn.com/problems/maximum-binary-tree/solution/zui-da-er-cha-shu-pythonjie-ti-si-lu-by-wrallen/