给定一个不重复的整数数组 nums最大二叉树 可以用下面的算法从 nums 递归地构建:

    1. 创建一个根节点,其值为 nums 中的最大值。
    2. 递归地在最大值 左边子数组前缀上 构建左子树。
    3. 递归地在最大值 右边子数组后缀上 构建右子树。

    返回 nums 构建的 *_最大二叉树_ 。

    示例 1:

    654最大二叉树 - 图1

    1. 输入:nums = [3,2,1,6,0,5]
    2. 输出:[6,3,5,null,2,0,null,null,1]
    3. 解释:递归调用如下所示:
    4. - [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5]
    5. - [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1]
    6. - 空数组,无子节点。
    7. - [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1]
    8. - 空数组,无子节点。
    9. - 只有一个元素,所以子节点是一个值为 1 的节点。
    10. - [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 []
    11. - 只有一个元素,所以子节点是一个值为 0 的节点。
    12. - 空数组,无子节点。

    提示:

    • 1 <= nums.length <= 1000
    • 0 <= nums[i] <= 1000
    • nums 中的所有整数 互不相同
    //递归就完事儿
    class Solution {
    public:
    
        TreeNode* tra(vector<int>&nums){
            int maxval=INT_MIN;
            if(nums.size()==0) return nullptr;
            int mid;
            int maxmid;
            for ( mid = 0; mid < nums.size(); mid++)
            {
                if (nums[mid]>maxval){
                  maxval = nums[mid];
                  maxmid=mid;
                } 
            }
            TreeNode* root=new TreeNode(maxval);
            vector<int> left(nums.begin(),nums.begin()+maxmid);
            vector<int> right(nums.begin()+maxmid+1,nums.end());
            root->left=tra(left);
            root->right = tra(right);
            return root;
        }
    
        TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
            if(nums.size()==0) return nullptr;
            return tra(nums);
        }
    };