牛客地址
解题思路
递归求解
实现代码
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param num int整型一维数组
* @return TreeNode类
*/
public TreeNode sortedArrayToBST(int[] nums) {
if(nums==null||nums.length==0)
return null;
return sortedArrayToBST(nums, 0 ,nums.length-1);
}
public TreeNode sortedArrayToBST(int[] num, int start, int end){
if(end < start){
return null;
}
if(end == start){
return new TreeNode(num[start]);
}
int mid = start + ((end - start + 1) >> 1);
TreeNode root = new TreeNode(num[mid]);
TreeNode left = sortedArrayToBST(num, start, mid - 1);
TreeNode right = sortedArrayToBST(num, mid + 1, end);
root.left = left;
root.right = right;
return root;
}
}
解题心得
- 除以2是右移1位,而不是右移2位。
- mid为start + ((end - start + 1) >> 1), 需要加1再除以2。