题目描述

[EN | CN]

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

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

通过给定的数组构建最大二叉树,并且输出这个树的根节点。

示例 :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
输入:[3,2,1,6,0,5]
输出:返回下面这棵树的根节点:

      6
    /   \
   3     5
    \    /
     2  0
       \
        1

提示:

给定的数组的大小在 [1, 1000] 之间。

解法 1:递归

递归大法好,直接解就好了。

复杂度分析略。

实现与结果如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 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 len(nums) == 0:
            return None
        max_idx, max_val = 0, nums[0]
        for i, num in enumerate(nums):
            if num > max_val:
                max_idx, max_val = i, num

        root = TreeNode(max_val)
        root.left = self.constructMaximumBinaryTree(nums[:max_idx])
        root.right = self.constructMaximumBinaryTree(nums[max_idx + 1:])

        return root
  • 执行用时:280 ms,在所有 Python3 提交中击败了 29.06% 的用户。
  • 内存消耗:14.1 MB,在所有 Python3 提交中击败了 20.00% 的用户。