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) {
TreeNode* root = traversal(nums, 0, nums.size() - 1);
return root;
}
};
时间复杂度:O(N)
思路:主要思路就是二分法,每次递归取数组的中间元素,(注意如果是偶数的时候是取左边还是右边),递归的单层逻辑就是把数组的中间元素当为根节点,然后一层一层的遍历下去。
多写一个函数的原因就是使用left和right更好的控制边界。