题目地址
要求二叉搜索树,则是左大右小,平衡的话,左右子树高度差不超过1,首先考虑大小为1,2,3……的数组,中间的为头结点,左边为左子树,右边为右子树,然后扩展到一般的数组,左右子数的构建用递归就可以了。
class Solution {
public:
TreeNode *sortedArrayToBST(vector<int> &nums) {
if (nums.empty()) {
return NULL;
}
TreeNode *root = new TreeNode(nums[nums.size() / 2]);
vector<int> vl = vector<int>(nums.begin(), nums.begin() + nums.size() / 2);
vector<int> vr = vector<int>(vector<int>(nums.begin() + nums.size() / 2 + 1, nums.end()));
root->left = sortedArrayToBST(vl);
root->right = sortedArrayToBST(vr);
return root;
}
};