美文网首页
LeetCode | 0654. Maximum Binary

LeetCode | 0654. Maximum Binary

作者: Wonz | 来源:发表于2021-01-23 18:11 被阅读0次

    Problem

    LeetCode

    Given an integer array with no duplicates. A maximum tree building on this array is defined as follow:

    1. The root is the maximum number in the array.
    2. The left subtree is the maximum tree constructed from left part subarray divided by the maximum number.
    3. The right subtree is the maximum tree constructed from right part subarray divided by the maximum number.

    Construct the maximum tree by the given array and output the root node of this tree.

    Example 1:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bTSB8rfA-1609944183381)(https://assets.leetcode.com/uploads/2020/12/24/tree1.jpg)]

    Input: nums = [3,2,1,6,0,5]
    Output: [6,3,5,null,2,0,null,null,1]
    

    Example 2:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w7UzhSQ2-1609944183394)(https://assets.leetcode.com/uploads/2020/12/24/tree2.jpg)]

    Input: nums = [3,2,1]
    Output: [3,null,2,null,1]
    

    Constraints:

    • 1 <= nums.length <= 1000
    • 0 <= nums[i] <= 1000
    • All integers in nums are unique.

    问题

    力扣

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

    1. 二叉树的根是数组 nums 中的最大元素。
    2. 左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。
    3. 右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。

    返回有给定数组 nums 构建的 最大二叉树

    示例 1:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3pLMglok-1609944183402)(https://assets.leetcode.com/uploads/2020/12/24/tree1.jpg)]

    输入: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:

    img
    输入:nums = [3,2,1]
    输出:[3,null,2,null,1]
    

    提示:

    • 1 <= nums.length <= 1000
    • 0 <= nums[i] <= 1000
    • nums 中的所有整数 互不相同

    思路

    递归

    1. 遍历找到数组最大值和对应索引
    2. 分别对最大值左右两边数组进行递归调用,构造左右子树
    

    Python3 代码

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def constructMaximumBinaryTree(self, nums: List[int]) -> TreeNode:
            # 特判
            if not nums:
                return None
            
            # 找到数组中的最大值和对应的索引
            maxVal = max(nums)
            maxIndex = nums.index(maxVal)
     
            root = TreeNode(nums[maxIndex])
            # 递归构造左右子树
            root.left = self.constructMaximumBinaryTree(nums[:maxIndex])
            root.right = self.constructMaximumBinaryTree(nums[maxIndex + 1:])
            
            return root
    

    GitHub 链接

    相关文章

      网友评论

          本文标题:LeetCode | 0654. Maximum Binary

          本文链接:https://www.haomeiwen.com/subject/xnfaoktx.html