/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: TreeNode* sortedArrayToBST(vector<int>& nums) { function<TreeNode*(int, int)> dfs = [&](int l, int r) -> TreeNode* { if (l > r) { return nullptr; } int mid = (l + r) >> 1; auto left = dfs(l, mid - 1); auto right = dfs(mid + 1, r); return new TreeNode(nums[mid], left, right); }; return dfs(0, nums.size() - 1); } };