/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param num int整型vector 
     * @return TreeNode类
     */
    TreeNode* dfs(vector<int>& num, int left, int right) {
        if (left > right) {
            return nullptr;
        }
        int mid = (left + right + 1) / 2;
        TreeNode *root = new TreeNode(num[mid]);
        root->left = dfs(num, left, mid - 1);
        root->right = dfs(num, mid + 1, right);
        return root;
    }
    TreeNode* sortedArrayToBST(vector<int>& num) {
        int len = num.size();
        if (len == 0) {
            return nullptr;
        }
        return dfs(num, 0, len - 1);
        // write code here
    }
};