最大二叉树

最大二叉树
这个题与105,106的区别就是只有一个数组
但是也可以构造因为根节点是找最大的然后进行划分
所以不需要像之前那样两个数组来确定根节点然后划分

class Solution {
    
    
public:
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
    
    
     return traversal(nums,0,nums.size());
    }
    TreeNode*traversal(vector<int>&nums,int left,int right)
    {
    
    
       // 左右区间如果没有数就返回空
        if(left>=right) return NULL;
       //找到分割点的坐标(最大值的坐标
        int maxvalueindex=left;
        for(int i=left+1;i<right;i++)
        {
    
    
            if(nums[i]>nums[maxvalueindex])
            {
    
    
               maxvalueindex=i;
            }

        }
        //构造二叉树
        TreeNode *root=new TreeNode(nums[maxvalueindex]);
        //在左边区间找最大的
        root->left=traversal(nums,left,maxvalueindex);
        //在右边区间找最大的
        root->right=traversal(nums,maxvalueindex+1,right);

      return root;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_44808694/article/details/113101816