思路:避开树的中序遍历等,这道题可以使用普通的解法,每次从中间开始递归连接相应结点
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
if(nums.size()==0)
return NULL;
TreeNode* result=sortedArrayToBST(nums,0,nums.size()-1);
return result;
}
TreeNode* sortedArrayToBST(vector<int>& nums,int l,int r)
{
if(l>r)
return NULL;
int mid=l+(r-l)/2;
TreeNode* root=new TreeNode(nums[mid]);
root->left=sortedArrayToBST(nums,l,mid-1); //选择nums[l]到nums[mid-1]的中间的一个数作为当前结点的左孩子,因为左子树都要小于当前结点;
root->right=sortedArrayToBST(nums,mid+1,r);//选择nums[mid+1]到nums[r]的中间的一个数作为当前结点的右孩子;因为右子树都要大于该结点;
return root;
}
};