Leetcode 654. Maximum Binary Tree (Python)
Related Topic
Description
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.
Sample I/O
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].
Methodology
Using DFS to recursively get the sub-list which contains the numbers that represented node values for left sub-stree. Convert the maximum value of current list be the root node of sub-tree. Then the left parts of list that exclusice the maximum value will constructed as left sub-stree of the current root. And the right parts of list that exclusice the maximum value will constructed as right substree of the current root.
Conditions
- If there is no value in the list, which means there are no more nodes to construct the sub-tree, terminate the current recursion.
After done the recursion, return the root node of the tree
Code
def constructMaximumBinaryTree(self, nums: List[int]) -> TreeNode:
if not nums:return
mx = max(nums)
index=nums.index(mx)
root = TreeNode(mx)
root.left = self.constructMaximumBinaryTree(nums[:index])
root.right = self.constructMaximumBinaryTree(nums[index+1:])
return root
BigO
When use recursion to get sub-list for left sub-tree, the BigO is logN and to get sub-list for right sub-tree will be same. Therefor the BigO is O(2*logN) Which is O(logN)