1. 程式人生 > >Leetcode 654. Maximum Binary Tree 最大二叉樹 解題報告

Leetcode 654. Maximum Binary Tree 最大二叉樹 解題報告

就是給了一堆不重複的陣列,然後挑選一個最大的作為root,然後root左邊的和右邊的有分別按照這個方法進行構建。
所以我做的方法也很簡單咯,那麼就每次找到這一段裡最大的做root,然後遞迴左右兩邊。。簡單粗暴的解法。。至於再高深的求各位大佬指教,我就不懂了

哦,對了,說起來倒是有個優化策略,可以設定上界,這樣就不用每次都搜尋了,喵喵

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

The root is the maximum number
in the array. The left subtree is the maximum tree constructed from left part subarray divided by the maximum number. 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
: Input: [3,2,1,6,0,5] Output: return the tree root node representing the following tree: 6 / \ 3 5 \ / 2 0 \ 1 Note: The size of the given array will be in the range [1,1000].

解題程式碼 python

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
# self.val = x # self.left = None # self.right = None class Solution(object): def constructMaximumBinaryTree(self, nums): """ :type nums: List[int] :rtype: TreeNode """ def helper(start, end, upper_bound): if start > end: return None max_i = start p = start + 1 while ums[max_i] < upper_bound & p <= end: if nums[p] > nums[max_i]: max_i = p p += 1 node = TreeNode(nums[max_i]) node.left = helper(start, max_i - 1, nums[max_i] - 1) node.right = helper(max_i + 1, end, nums[max_i] - 1) return node return helper(0,len(nums) -1, 9999999)