因爲是有序數組,取中間位置的值爲樹根。將數組分成兩半。 對左半遞歸構建左子樹。對右半遞歸構建右子樹。
就是一個二分法。
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
return ToBST(nums, 0, nums.size()-1);
}
TreeNode* ToBST(vector<int>& nums, int left, int right){
if(left > right) return NULL;
int mid = (int)(left + right + 1) / 2; (注意這裏要+1 ,因爲int 將小數位給捨棄掉了),
TreeNode* root = new TreeNode(nums[mid]);
cout << "nums[mid] is:" << nums[mid] << "mid is:" << mid << endl;
root->left = ToBST(nums, left, mid-1);
root->right = ToBST(nums, mid+1, right);
return root;
}
};