力扣654:最大二叉树

力扣654:最大二叉树

题目

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

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

返回 nums 构建的 最大二叉树 。

思路

题目已经把思路给我们了,我们只需要实现对应的函数即可。

代码

cpp 复制代码
/**
 * 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* recursion(vector<int>& nums, int left, int right) {
        if (left > right) {
            return nullptr;
        }
        int maxloca = left;
        for (int i = left + 1; i <= right; i++) {
            if (nums[maxloca] < nums[i]) {
                maxloca = i;
            }
        }
        TreeNode* root = new TreeNode(nums[maxloca]);
        root->left = recursion(nums, left, maxloca - 1);
        root->right = recursion(nums, maxloca + 1, right);
        return root;
    }
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        return recursion(nums, 0, nums.size() - 1);
    }
};
相关推荐
晨曦夜月9 小时前
笔试强训day7
开发语言·c++·算法
iAkuya9 小时前
(leetcode)力扣100 14合并区间(差分/排序)
算法·leetcode·职场和发展
leiming69 小时前
C++ 02 函数模板案例
开发语言·c++·算法
自然常数e10 小时前
深入理解指针(6)
c语言·数据结构·算法·visual studio
Xの哲學10 小时前
Linux VxLAN深度解析: 从数据平面到内核实现的全面剖析
linux·服务器·算法·架构·边缘计算
TL滕10 小时前
从0开始学算法——第十八天(分治算法练习)
笔记·学习·算法
月明长歌10 小时前
【码道初阶】【LeetCode 958】判定完全二叉树:警惕 BFS 中的“管中窥豹”陷阱
算法·leetcode·宽度优先
CodeAmaz11 小时前
Java 垃圾回收(GC)算法详解
java·jvm·算法·垃圾回收算法
一直都在57211 小时前
数据结构入门:二叉排序树的构建与相关算法
数据结构·算法
_Minato_11 小时前
数据结构知识整理——复杂度的计算
数据结构·经验分享·笔记·算法·软考