力扣打卡:654. 最大二叉树
解题思路首先在整段中寻找一个最大值,找到之后构建一个节点,接着从左右两端中重复同样的动作
从思路上得到,需要构建一个辅助函数,能够从一个数组(left,right)中找到最大值,然后递归的调用构建左边一段,右边一段
首先是: [321] 6 [05] 然后: ----6 [05] ---3 [21] 此时3的左侧没有了,也就是没有左孩子 ----2 [1] 此时2的左侧没有了,也就是没有左孩子 -----1 此时只剩下一个元素,没有左孩子右孩子 ----6 -----[0]5 此时5的右侧没有了,也就是没有右孩子 -----0 此时只剩下了一个元素,也就是没有左孩子右孩子代码
class Solution {
public TreeNode constructMaximumBinaryTree(int[] nums) {
TreeNode root = build(nums,0,nums.length);
return root;
}
// 通过一个辅助函数去构建节点,每一段寻找最大值构建,然后分开字段重新构建
public TreeNode build(int[] nums, int l, int r){
if(l >= r) return null;
int max = Integer.MIN_VALUE;
int point = 0;
for(int i=l; imax){point = i; max=nums[i];}
}
TreeNode root = new TreeNode(max); // 构建新的节点
// 递归调用构建左右子树节点
root.left = build(nums,l,point);
root.right = build(nums,point+1,r);
return root;
}
}
记住框架,方向就对了,具体的细节可以商定



