https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/

1. Use BST:

  1. //24 ms 23.5 MB
  2. /**
  3. * Definition for a binary tree node.
  4. * struct TreeNode {
  5. * int val;
  6. * TreeNode *left;
  7. * TreeNode *right;
  8. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  9. * };
  10. */
  11. class Solution {
  12. public:
  13. TreeNode* sortedArrayToBST(vector<int>& nums) {
  14. //input is already sorted
  15. int l = 0, r = nums.size() - 1;
  16. TreeNode* root = build(nums, l, r);
  17. return root;
  18. }
  19. private:
  20. TreeNode* build(vector<int>& nums, int l, int r) {
  21. if(l > r) return NULL;
  22. int median = l + (r - l) / 2;
  23. TreeNode* root = new TreeNode(nums[median]);
  24. root->left = build(nums, l, median - 1);
  25. root->right = build(nums, median + 1, r);
  26. return root;
  27. }
  28. };