Problem discription:
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
Accepted Code:
1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */10 class Solution {11 public:12 TreeNode *sortedArrayToBST(vector &num, int start, int end) {13 if (start > end) {14 return NULL;15 } 16 // if you write " int middle = start + (end - start) >> 1"17 // instead of the following sentence, you should keep in 18 // mind that the priority of ">>" is weaker than "+" operator19 int middle = start + (end - start) / 2;20 TreeNode *p = new TreeNode(num[middle]);21 // elements at the left of num[middle] construct22 // the left child tree of "p" and its right child23 // tree consists of elements located at the right24 // of num[middle]...25 // because the given array is sorted26 if (start != end) {27 p->left = sortedArrayToBST(num, start, middle - 1);28 p->right = sortedArrayToBST(num, middle + 1, end);29 }30 return p;31 }32 TreeNode *sortedArrayToBST(vector &num) {33 // call the overload function34 return sortedArrayToBST(num, 0, num.size() - 1);35 }36 };