思路:
1. 数组内只有一个元素时,直接构造节点返回;
2. 构造递归方法,传入数组的范围;
3. 寻找当前最大的元素,然后一这个节点为基准切割数组;
4. 后续按元素切割方法递归进入下一轮切割。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode constructMaximumBinaryTree(int[] nums) {
if(nums.length == 1){
return new TreeNode(nums[0]);
}
return getBestTreeNode(nums,0,nums.length - 1);
}
private TreeNode getBestTreeNode(int[] nums,int left,int right){
if(left > right){
return null;
}
int best = left;
for(int i = left + 1;i < right + 1;i++){
if(nums[i] > nums[best]){
best = i;
}
}
TreeNode node = new TreeNode(nums[best]);
node.left = getBestTreeNode(nums,left,best - 1);
node.right = getBestTreeNode(nums,best + 1,right);
return node;
}
}