首先理解一下平衡二叉搜索树(BST),看题中给的例子:
输入:[-1,0,1,2]
输出:
{1,0,2,-1}
也就是
图片说明
图比较丑,根节点取值为1,最后一层节点是-1。

然后,结合题目,需要根据输入来构建输出,那关键点就是确定根节点,因为得到根节点后,序列就分为
【左子树 跟节点 右子树】了,然后递归调用就搞定了。

给定一个区间[start,end],根节点的下标如何确定呢?找找规律,可以发现 根节点下标就是index = (start+end+1)/2,为的是把填不满的叶子节点最终放置到左子树中。

好了,下面可以写代码了

class Solution {
public:
    /**
     * 
     * @param num int整型vector 
     * @return TreeNode类
     */
    TreeNode* sortedArrayToBST(vector<int>&num, int start, int end){
        if(start>end)
            return NULL;
        int mid = (start + end+1)/2;
        TreeNode* root = new TreeNode(num[mid]);
        root->left = sortedArrayToBST(num, start, mid -1);
        root->right = sortedArrayToBST(num, mid+1, end);
        return root;


    }
    TreeNode* sortedArrayToBST(vector<int>& num) {
        // write code here
        return sortedArrayToBST(num,0,num.size()-1);
    }
};