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