```
TreeNode *inorder(vector<int>& nums, int root, int &index) {
if (root > nums.size()) return NULL;
TreeNode *left = inorder(nums, root * 2, index);
TreeNode *r = new TreeNode(nums[index++]);
TreeNode *right = inorder(nums, root * 2 + 1, index);
r->left = left;
r->right = right;
return r;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
int index = 1;
nums.insert(nums.begin(), 0);
return inorder(nums, 1, index);
}
```

The idea is that we can treat the array as trees and construct the tree during in-order traversal. **And it guarantee the constructed tree to be the complete binary tree.**