当前位置: 首页 > news >正文

最大二叉树-力扣

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

  • 创建一个根节点,其值为 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;}
};

相关文章:

  • 从零实现ChatGPT:第四章在无标签数据上预训练
  • 手写节流防抖函数
  • 多个线程多个锁:如何确保线程安全和避免竞争条件
  • Python pandas openpyxl excel合并单元格,设置边框,背景色
  • 在 Linux 系统上安装 Android NDK
  • 呼叫中心系统的国产化替代方案
  • 【Flutter】 TextField限制长度时, 第三方手写输入法、ios原始拼音输入法输入被吞问题
  • swift微调牧歌数据电商多模态大语言模型
  • 【Spring6】1-12章源码级深入详解 IoC
  • 网络安全(补充)
  • 外卖抢单神器
  • 重学java 66.IO流 转换流
  • Linux-笔记 设备树插件
  • 3072. 将元素分配到两个数组中 II Rust 线段树 + 离散化
  • GIGE 协议摘录 —— GVSP 协议(三)
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • docker-consul
  • go语言学习初探(一)
  • hadoop集群管理系统搭建规划说明
  • JavaScript设计模式之工厂模式
  • JS笔记四:作用域、变量(函数)提升
  • pdf文件如何在线转换为jpg图片
  • Redis学习笔记 - pipline(流水线、管道)
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Spring Cloud中负载均衡器概览
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 从setTimeout-setInterval看JS线程
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 工程优化暨babel升级小记
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 简单易用的leetcode开发测试工具(npm)
  • 力扣(LeetCode)357
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 配置 PM2 实现代码自动发布
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 项目管理碎碎念系列之一:干系人管理
  • 协程
  • Android开发者必备:推荐一款助力开发的开源APP
  • Spring Batch JSON 支持
  • #php的pecl工具#
  • #QT(TCP网络编程-服务端)
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (12)Hive调优——count distinct去重优化
  • (4)STL算法之比较
  • (C语言)fread与fwrite详解
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (转)C#调用WebService 基础
  • (转)我也是一只IT小小鸟
  • (转载)从 Java 代码到 Java 堆
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net 4.0发布后不能正常显示图片问题
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET Core 中的路径问题