最大二叉树-力扣

本题同样是根据给定数组,构造一个二叉树。构造规则是:

  • 创建一个根节点,其值为 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) {
        if(nums.size() == 1){
            return new TreeNode(nums[0]);
        }
        int maxVal = 0;
        int maxIndex = 0;
        for(int i = 0; i < nums.size(); i++){
            if(nums[i] > maxVal){
                maxVal = nums[i];
                maxIndex = i;
            }
        }
        TreeNode* root = new TreeNode(maxVal);
        if(maxIndex > 0){
            vector<int> left(nums.begin(), nums.begin() + maxIndex);
            root->left = constructMaximumBinaryTree(left);
        }
        if(maxIndex < nums.size() - 1){
            vector<int> right(nums.begin() + maxIndex + 1, nums.end());
            root->right = constructMaximumBinaryTree(right);
        }

        return root;
    }
};

相关推荐

  1. -

    2024-06-11 22:58:06       29 阅读
  2. 654,

    2024-06-11 22:58:06       32 阅读
  3. 124. 中的路径和

    2024-06-11 22:58:06       52 阅读
  4. 0124——路径和

    2024-06-11 22:58:06       51 阅读
  5. [ Hot100]Day50 中的路径和

    2024-06-11 22:58:06       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-11 22:58:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-11 22:58:06       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-11 22:58:06       82 阅读
  4. Python语言-面向对象

    2024-06-11 22:58:06       91 阅读

热门阅读

  1. 数组中的map方法

    2024-06-11 22:58:06       29 阅读
  2. RV32I指令集

    2024-06-11 22:58:06       24 阅读
  3. Redis的过期策略以及内存淘汰机制

    2024-06-11 22:58:06       29 阅读
  4. 关于Spring Cacheable注解的讨论

    2024-06-11 22:58:06       37 阅读
  5. Rust reqwest 简明教程

    2024-06-11 22:58:06       35 阅读
  6. 【Qt 实现 QCryptographicHash 加密数据的步骤】

    2024-06-11 22:58:06       24 阅读