中序遍历的逆序过程。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* sortedArrayToBST(vector<int>& nums) { return sortedArrayToBST(nums, 0, nums.size() - 1); } TreeNode* sortedArrayToBST(vector<int>& nums, int left, int right) { if (right < left) return nullptr; int mid = left + (right - left) / 2; //此处注意直接相加可能会溢出 TreeNode* root = new TreeNode(nums[mid]); root->left = sortedArrayToBST(nums, left, mid - 1); //构建左树 root->right = sortedArrayToBST(nums, mid + 1, right); //构建右树 return root; } };