将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */
class Solution {
public:
// TreeNode *sortedArrayToBST(vector<int> &num) {
// return sortedArrayToBST(num, 0 , num.size() - 1);
// }
// TreeNode *sortedArrayToBST(vector<int> &num, int left, int right) {
// if (left > right) return NULL;
// int mid = (left + right) / 2;
// TreeNode *cur = new TreeNode(num[mid]);
// cur->left = sortedArrayToBST(num, left, mid - 1);
// cur->right = sortedArrayToBST(num, mid + 1, right);
// return cur;
// }
TreeNode* sortedArrayToBST(vector<int>& nums) {
int numsmid = nums.size() / 2 ;
if(nums.size()==0)
{
return NULL;
}
TreeNode* root = new TreeNode(nums[numsmid]);
if(nums.size()==1)
{
//root->val = nums[0];
root->left = NULL;
root->right = NULL;
}
else if(nums.size()==2)
{
vector<int> nums1;
nums1.push_back(nums[0]);
//root->val = nums[1];
root->left = sortedArrayToBST(nums1);
root->right = NULL;
}
else
{
vector<int> nums1(nums.begin(),nums.begin()+numsmid);
vector<int> nums2(nums.begin()+numsmid+1,nums.end());
root->val = nums[numsmid];
root->left = sortedArrayToBST(nums1);
root->right = sortedArrayToBST(nums2);
}
return root;
// TreeNode* root = NULL;
// if(nums.size()<1) {
// return root;
// }
// int medium = nums.size()/2;
// root = new TreeNode(nums[medium]);
// vector<int> vec_left(nums.begin(), nums.begin()+medium);
// vector<int> vec_right(nums.begin()+medium+1, nums.end());
// root->left = sortedArrayToBST(vec_left);
// root->right = sortedArrayToBST(vec_right);
// return root;
}
};