Leetcode•Jun 04, 2025
Maximum Binary Tree
Hazrat Ali
Leetcode
You are given an integer array nums with no duplicates. A maximum binary tree can be built recursively from nums using the following algorithm:
- Create a root node whose value is the maximum value in
nums. - Recursively build the left subtree on the subarray prefix to the left of the maximum value.
- Recursively build the right subtree on the subarray suffix to the right of the maximum value.
Return the maximum binary tree built from nums.
Example 1:

Input: nums = [3,2,1,6,0,5]
Output: [6,3,5,null,2,0,null,null,1]
Explanation: The recursive calls are as follow:
- The largest value in [3,2,1,6,0,5] is 6. Left prefix is [3,2,1] and right suffix is [0,5].
- The largest value in [3,2,1] is 3. Left prefix is [] and right suffix is [2,1].
- Empty array, so no child.
- The largest value in [2,1] is 2. Left prefix is [] and right suffix is [1].
- Empty array, so no child.
- Only one element, so child is a node with value 1.
- The largest value in [0,5] is 5. Left prefix is [0] and right suffix is [].
- Only one element, so child is a node with value 0.
- Empty array, so no child.
Example 2:

Input: nums = [3,2,1] Output: [3,null,2,null,1]
Solution
/**
* @param {number[]} nums
* @return {TreeNode}
*/
const constructMaximumBinaryTree = nums => {
const helper = (i, j) => {
if (i > j) {
return null;
}
if (i === j) {
return new TreeNode(nums[i]);
}
const k = nums.indexOf(Math.max(...nums.slice(i, j + 1)));
const root = new TreeNode(nums[k]);
root.left = helper(i, k - 1);
root.right = helper(k + 1, j);
return root;
};
return helper(0, nums.length - 1);
};
export default constructMaximumBinaryTree;