108. 将有序数组转换为二叉搜索树 - 力扣(LeetCode)
要保证平衡,可以每次选择中间位置的元素作为根节点,这样根节点两边的元素个数就是相同的(最多相差1),根节点的左右子树创建过程也是类似,使用递归创建。
class Solution {
public:
TreeNode* create(vector<int>& nums, int low, int high){
if(low > high) return NULL;
int mid = (high + low)/2;
TreeNode* root = new TreeNode(nums[mid]);
root->left = create(nums, low, mid-1);
root->right = create(nums, mid+1, high);
return root;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
return create(nums, 0, nums.size()-1);
}
};