Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
注意是高度平衡的数。所以选好每个点很关键。不用重新比较。
解法1:利用函数重载实现递归(20ms)
TreeNode *sortedArrayToBST(vector<int>& nums,int start,int end){
if(start>end) return NULL;
int mid=(start+end)/2;
TreeNode *root=new TreeNode(nums[mid]);
root->left=sortedArrayToBST(nums,start,mid-1);
root->right=sortedArrayToBST(nums,mid+1,end);
return root;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
int n=nums.size();
TreeNode *root=NULL;
if(n==0) return root;
return sortedArrayToBST(nums,0,n-1);
}
解法2:直接利用迭代器来递归(24ms)
TreeNode* sortedArrayToBST(vector<int>& nums){//用一个函数实现,不重载
int n=nums.size();
TreeNode *root=NULL;
if(n==0) return root;
int mid=n/2;
root=new TreeNode(nums[mid]);
vector<int>::iterator first,last;
first=nums.begin();
last=nums.begin()+mid;
vector<int> v(first,last);
root->left=sortedArrayToBST(v);
if(mid<n){
first=nums.begin()+mid+1;
last=nums.end();
vector<int> w(first,last);
root->right=sortedArrayToBST(w);
}
return root;
}