TreeNode* _sortedArrayToBST(vector<int>& num, int pos, int len) { if (len <= 0) return NULL; int mid = pos + len / 2; TreeNode* root = new TreeNode(num[mid]); root -> left = _sortedArrayToBST(num, pos, mid - pos); root -> right = _sortedArrayToBST(num, mid + 1, len - (mid - pos + 1)); return root; }
TreeNode* _sortedArrayToBST(vector<int>& num, int start, int end){ if(start==end) return new TreeNode(num[start]); if(start>end) { return NULL; } int mid=start+(end-start)/2; TreeNode* root=new TreeNode(num[mid]); root->left=_sortedArrayToBST(num, start,mid-1); root->right=_sortedArrayToBST(num,mid+1,end); return root; }
TreeNode* _sortedArrayToBST(vector<int>& num, int start, int end) { if (end < start) { return nullptr; } int mid = start + (end - start) / 2; TreeNode* subroot = new TreeNode(num[mid]); subroot->left = _sortedArrayToBST(num, start, mid - 1); subroot->right = _sortedArrayToBST(num, mid + 1, end); return subroot; }
TreeNode* sortedArrayToBST(vector<int>& nums) { return _sortedArrayToBST(nums, 0, nums.size() - 1); }
TreeNode *sortedArrayToBST(vector<int> &num) { // Start typing your C/C++ solution below // DO NOT write int main() function return _sortedArrayToBST(num, 0, num.size()); }
TreeNode *sortedArrayToBST(vector<int> &num) { if (num.empty()) { return nullptr; } return _sortedArrayToBST(num, 0, num.size() - 1); }