654.最大二叉树
思路
做完昨天的中序及后序遍历构建二叉树,做今天这个题目就有些类似的感觉,同样使用双指针来控制nums中的数值变动即可。构建递归函数,每次找出最大的值,然后找出其下标(一开始像昨天一样使用hashmap,后来发现每次都要循环来找最大值,可以顺便找其下标,可以不用hashmap),递归其左右两子树。
代码
public TreeNode constructMaximumBinaryTree(int[] nums) {
TreeNode root=new TreeNode();
root=build(nums,0,nums.length-1);
return root;
}
public TreeNode build(int[] nums,int left,int right){
if (left>right) return null;
int max=-1; int index=0;
for (int i=left;i<=right;i++){
if (nums[i]>max) {
max=nums[i];
index=i;
}
}
TreeNode root=new TreeNode(max);
root.left=build(nums,left,index-1);
root.right=build(nums,index+1,right);
return root;
}