链接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/
想到了每次取中间值作为根节点的值递归求整棵树,但是边界判断问题没有理清楚,看了看答案,很简单
两个边界作为参数,若left>right返回空指针
递归时左子树取left,mid-1,右子树取mid+1,right即可
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
return creat(nums,0,nums.size()-1);
}
TreeNode* creat(vector<int>&nums,int left,int right){
if(left>right)
return nullptr;
int me=(left+right)/2;
TreeNode*root=new TreeNode(nums[me]);
root->left=creat(nums,left,me-1);
root->right=creat(nums,me+1,right);
return root;
}
};
时间复杂度:O(n),其中 n 是数组的长度。每个数字只访问一次。
空间复杂度:O(logn),其中 n 是数组的长度。空间复杂度不考虑返回值,因此空间复杂度主要取决于递归栈的深度,递归栈的深度是 O(logn)。