题目描述:
解题思路:二叉搜索树的特点是左子树>根节点>右子树,而且可以发现题目中所给的数字就是由二叉搜索树中序遍历得到,数组中间的值就为根节点,以根节点为划分线左边为左子树,右边为右子树,然后采用二分和递归的思想重建二叉搜索树即可;
代码实现如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return addNode(nums,0,nums.length-1);
}
public TreeNode addNode(int[] nums,int left,int right){
//递归返回条件
if(left>right){
return null;
}
//这里注意运算符优先级问题
int mid=left+((right-left)>>1);
TreeNode ret=new TreeNode(nums[mid]);
//创建左子树
ret.left=addNode(nums,left,mid-1);
//创建右子树
ret.right=addNode(nums,mid+1,right);
//返回根节点
return ret;
}
}