[LeetCode] C ++:中間問題-ツリー654。最大の二分木

654.最大の二分木

中難易度242

繰り返される要素のない整数配列が与えられます nums 。この配列から直接再帰的に構築される最大二分木は  、次のように定義されます。

  1. 二分木のルートはnums 、配列 内の最大の要素です。
  2. 左側のサブツリーは配列の 最大値の左側の部分 から再帰的に構築された最大の二分木です。
  3. 右側のサブツリーは配列の 最大値の右側の部分 から再帰的に構築された最大の二分木です。

指定された配列でnums 構築さた 最大の二分木を 返します 

 

例1:

入力: nums = [3,2,1,6,0,5]
出力: [6,3,5、null、2,0、null、null、1]
説明:再帰呼び出しは次のとおりです:
-[3 、2,1,6,0,5]の最大値は6で、左側は[3,2,1]、右側は[0,5]です。
    -[3,2,1]の最大値は3、左側は[]、右側は[2,1]です。
        -空の配列、子ノードはありません。
        -[2,1]の最大値は2、左側は[]、右側は[1]です。
            -空の配列、子ノードはありません。
            -要素は1つしかないため、子ノードは値が1のノードです。
    -[0,5]の最大値は5、左側は[0]、右側は[]です。
        -要素は1つしかないため、子ノードは値が0のノードです。
        -空の配列、子ノードはありません。

例2:

入力: nums = [3,2,1]
出力: [3、null、2、null、1]

 

促す:

  • 1 <= nums.length <= 1000
  • 0 <= nums[i] <= 1000
  • nums のすべての整数は互いに異なります 

再帰

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        TreeNode* node = new TreeNode(0);
        if(nums.size() == 1){
            node->val = nums[0];
            return node;
        }
        int maxValue = 0;
        int maxValueIndex = 0;  //找最大值
        for(int i = 0; i < nums.size(); i++){
            if(nums[i] > maxValue){
                maxValue = nums[i];
                maxValueIndex = i;
            }
        }
        node->val = maxValue;
        if(maxValueIndex > 0){
            vector<int> newVec(nums.begin(), nums.begin() + maxValueIndex);
            node->left = constructMaximumBinaryTree(newVec);
        }
        if(maxValueIndex < (nums.size()-1)){
            vector<int> newVec(nums.begin() + maxValueIndex + 1, nums.end());
            node->right = constructMaximumBinaryTree(newVec);
        }
        return node;
    }
};

 

おすすめ

転載: blog.csdn.net/weixin_44566432/article/details/113853865