最大の二分木

最大二分木
この問題と105および106の違いは、配列
1つしかないことですが、ルートノードが最大で分割されていることがわかった
ため、2つの配列で決定する必要がないため、構築することもできます。ルートノードを作成し、前と同じように分割します。

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