TreeNode* arrayToBst(vector<int> &A, int start, int end) { if (start == end) { return new TreeNode(A[start]); } else if (start > end) { return NULL; } int m = (start + end) / 2; TreeNode* mNode = new TreeNode(A[m]); mNode->left = arrayToBst(A, start, m-1); mNode->right = arrayToBst(A, m+1, end); return mNode; }
/* 边界条件可以改为 if(lh > rh) return NULL; */ TreeNode* arrayToBst(vector<int>& nums, int lh, int rh) { TreeNode* node = new TreeNode(0); // 可以写为 lh + (rh - lh)/2避免overflow int mid = (lh + rh) / 2; node->val = nums[mid]; if (lh == rh) return node; node->right = arrayToBst(nums, mid + 1, rh); if (lh == mid) return node; else node->left = arrayToBst(nums, lh, mid - 1); }
TreeNode* sortedArrayToBST(vector<int>& nums) { TreeNode* root; if (nums.empty()) { return root; } else { return arrayToBst(nums, 0, nums.size() - 1); } }
/** * @param A: A sorted (increasing order) array * @return: A tree node */ TreeNode *sortedArrayToBST(vector<int> &A) { // write your code here return arrayToBst(A, 0, A.size() - 1); }