654. 最大二叉树

654. 最大二叉树

原始题目链接:https://leetcode-cn.com/problems/maximum-binary-tree/

给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下:

二叉树的根是数组 nums 中的最大元素。
左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。
右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。
返回有给定数组 nums 构建的 最大二叉树 。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
解题思路:

递归构建最大二叉树即可。 递归的三要素:

  1. 定义递归函数的功能
  2. 寻找递归结束条件
  3. 找出递归函数的等价关系式

代码实现:

# 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/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值