// 0654. Maximum Binary Tree
class Solution {
public TreeNode constructMaximumBinaryTree(int[] nums) {
return construct(nums, 0, nums.length - 1);
}
private TreeNode construct(int[] nums, int left, int right) {
if (left > right) return null;
if (left == right) return new TreeNode(nums[left]);
int maxValue = -1;
int mid = 0;
for (int i = left; i <= right; ++i) {
if (nums[i] > maxValue) {
maxValue = nums[i];
mid = i;
}
}
TreeNode node = new TreeNode(maxValue);
node.left = construct(nums, left, mid - 1);
node.right = construct(nums, mid + 1, right);
return node;
}
}
学习笔记:
这是一道二叉树、模拟算法、递归调用、分治的题目。
一开始没有读懂题目,就想着要做成一个二叉堆,后来发现左右方向要和原数组一致,才反应过来为什么题目没有说解不是唯一的任何解都可以。
读清楚题目之后,就变得简单了,就是找最大,然后二分。