【二叉树专题】最大二叉树

 一、最大二叉树

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

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

返回 nums 构建的 最大二叉树 

 思路:类似于快排,时间复杂度n^2,最好n。


class Solution {
public:
    int  index(vector&nums,int left,int right)
      {
          int max=left;
            for(int i=left;i<=right;i++)
            {
                 if(nums[i]>nums[max])
                 max=i;
            }
            return max;
      }
    TreeNode* constructMaximume(vector& nums,int left,int right) 
    {   if(left>right)
          return nullptr;
         int max=index(nums,left,right);
          TreeNode*p=new TreeNode;
          p->val=nums[max];
        p->left= constructMaximume(nums,left,max-1);
        p->right=constructMaximume(nums,max+1,right);
        return p;
    }
    TreeNode* constructMaximumBinaryTree(vector& nums) {
     return constructMaximume(nums,0,nums.size()-1);
    }
};

你可能感兴趣的:(#力扣牛客刷题,算法,leetcode,数据结构)