? ? ?捋了半天终于把这题的思路捋出来了!
参考代码:
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
if(nums==null){
return null;
}
return helper(nums,0,nums.length-1);
}
public TreeNode helper(int[] nums,int left,int right){
if(left>right){
return null;
}
int mid=left+(right-left)/2;
TreeNode root=new TreeNode(nums[mid]);
root.left=helper(nums,left,mid-1);
root.right=helper(nums,mid+1,right);
return root;
}
}
题目中给的数组本来就是升序的,二叉树的从左到右数依次递增,所以只需找到中位数作为根节点,helper方法里的left和right相当于指针,以数组[-10,-3,0,5,9]为例,确定root为0后,将数组中0的左边部分分为左子树,通过root.left=helper(nums,left,mid-1),再次进入方法,此时left=0,right=1,将范围锁定在[-10,-3]之间,然后通过root.left=helper(nums,left,mid-1)再次进入方法,此时left=0,right=-1,所以root.left为null,到root.right=helper(nums,mid+1,right),再次进入方法,此时left=1,right=1,所以以-10位根节点的右孩子为-3,且此时root=-3,然后return root 就返回到了root.left=helper(nums,left,mid-1),也就是root等于0这个根节点,然后再转到0右边的部分右子树,同样的递归方法,最后返回树。
|