这里写的时候犯了个错,就是还用if来判断了一下。其实根本不用,直接根据 数组的中间元素来拆分就可以了。
还忘记了判断退出条件。当数组为空就返回。
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
// 找出中间结点
// 根据中间结点,来构建二叉树。
if(nums.empty())
return nullptr;
int mid = nums.size() / 2;
TreeNode* root = new TreeNode(nums[mid]);
vector<int> num1(nums.begin(), nums.begin() + mid);
root->left = sortedArrayToBST(num1);
vector<int> num2(nums.begin() + mid + 1, nums.end());
root->right = sortedArrayToBST(num2);
return root;
}
};
可以用下标来提高效率,不用每次都创建一个新的数组。
class Solution {
public:
TreeNode* traversal(vector<int> &nums,int left, int right)
{
if(left > right)
return nullptr;
int mid = left + ((right - left) / 2);
TreeNode* root = new TreeNode(nums[mid]);
root->left = traversal(nums, left, mid -1);
root->right = traversal(nums, mid + 1, right);
return root;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
return traversal(nums, 0, nums.size() - 1);
}
};