题目链接:Convert Sorted Array to Binary Search Tree

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

这道题的要求是将有序数组转化成高度平衡的二叉搜索树(BST)。

由于数组有序,因此相当于二叉搜索树的前序遍历。又由于要求二叉搜索树高度平衡,即左右子树高度相差小于等于1,所以取数组中间的数作为根节点,左边作为左子树,右边作为右子树,这样就可以构造出高度平衡的二叉搜索树了。

这样,思路就和Construct Binary Tree from Preorder and Inorder Traversal以及Construct Binary Tree from Inorder and Postorder Traversal差不多,都是递归构造左右子树即可。

时间复杂度:O(n)

空间复杂度:O(n)

 1 class Solution  2 { 3 public: 4     TreeNode *sortedArrayToBST(vector<int> &num)  5     { 6         return sortedArrayToBST(num, 0, num.size() - 1); 7     } 8 private: 9     TreeNode *sortedArrayToBST(vector<int> &num, int l, int r)10     {11         if(l > r)12             return NULL;13         14         int m = (l + r) / 2;15         TreeNode *root = new TreeNode(num[m]);16         root -> left = sortedArrayToBST(num, l, m - 1);17         root -> right = sortedArrayToBST(num, m + 1, r);18         return root;19     }20 };